2015-02-07 50 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