2015-02-07 85 views
0

我被困在這個時間太長,我只是需要有人來告訴我的方向......傳輸數據使用MVVM模式

的事情是,我試着使用MVVM模式來開發,我可以似乎我不知道如何從某個方法傳輸某些數據並將其綁定到我的XAML。此外,我在所有這種結構中設置接口(INotifyPropertyChanged)都有問題。你們中的任何一個人可以展示它必須在哪裏實施?

我會盡量在我的代碼解釋...

我有一個DataModel的是例如將是一個API,它會從網上獲取一些數據:

public class DataModel 
{ 
    public string apiResult = "null"; 

    private void GetDataFromApi() 
    { 
     // Some web service 
     apiResult = "SOME RESULT FROM WEB API"; 
    } 
} 

現在我有一個視圖模型的邏輯:

public class ViewModel 
{ 
    private DataModel dm = new DataModel(); 

    public string ApiResult 
    { 
     get { return dm.apiResult; } 
     set { dm.apiResult = value; } 
    } 

    public void GetApi() 
    { 
     dm.GetDataFromApi(); 
    } 
} 

而且finaly查看:

<Window 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="clr-namespace:WPFexample" x:Class="WPFexample.MainWindow" 
    DataContext="{Binding ''}" 

    Title="MainWindow" Height="350" Width="525"> 
<Grid> 
    <TextBlock HorizontalAlignment="Left" 
     Margin="110,126,0,0" 
     TextWrapping="Wrap" 
     Text="{Binding ApiResult}" 
     VerticalAlignment="Top" 
     RenderTransformOrigin="0.296,-1.239"> 
     <TextBlock.DataContext> 
      <local:ViewModel/> 
     </TextBlock.DataContext> 
    </TextBlock> 

</Grid> 
</Window> 

其實我也不知道我怎麼能實現這個作爲我的「apiResult」始終是初始值「空」,我希望它從方法GetDataFromApi

我怎樣才能得到結果所有這些在MVVM中工作,並且實現了一些接口。

我已經看過各種教程,但不能似乎抓住它,因爲他們都從一開始就缺乏的東西或我不太明白的邏輯...

曾經也被推這GIT:https://github.com/lklancir/WPFexample/tree/master/WPFexample/WPFexample

希望你可以指點我在正確的方向...

+0

它看起來不像你在任何地方調用'DataModel.GetDataFromApi()'。 – 2015-02-07 15:48:59

+0

我試圖在ViewModel中調用它,但是當我去調試器時沒有任何反應 – klanc 2015-02-07 15:51:34

+0

然後請發佈代碼。現在,你的問題將被關閉。很明顯,ApiResult將會是空的,因爲你沒有在任何地方填充它。 – 2015-02-07 15:58:58

回答

1

它爲我工作,如果GetDataFromApi被實際調用。將此代碼添加到DataModel.cs中,並且gui顯示「某些結果來自WEB API」

public DataModel() 
{ 
    Task.Factory.StartNew(() => this.GetDataFromApi()); 
} 

但是,這是一個計時問題。如果向任務添加睡眠,它將不再起作用,因爲沒有任何東西傳播屬性的更改。您應該實現INotifyPropertyChanged或使用DependencyProperties。

+0

這是非常先進的:D。啊所以我必須在這裏調用構造函數?是的,我真的不知道如何實現這個接口在這個 – klanc 2015-02-07 16:09:51

+0

構造函數被自動調用。但是在你的代碼的某個地方,你必須調用GetDataFromApi。我認爲使用任務會模擬從某種api異步讀取。但我認爲關鍵是WPF沒有被告知變化。它只是按時讀取價值。如果你想觸發更新,你必須通知WPF有關更改。這通常使用INotifyPropertyChanged完成。 – 2015-02-09 21:02:44