使用MVVM模式在WPF中传输数据

时间:2015-02-07 15:46:01

标签: c# wpf xaml 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";
    }
}

现在我有一个逻辑的ViewModel:

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

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

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

最后的观点:

<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>

其实我不知道如何实现这个作为我的&#34; apiResult&#34;始终是初始值&#34; null&#34;,我希望它从METHOD GetDataFromApi

获得结果

如何在MVVM中实现所有这些功能,并实现一些接口。

我已经查看了各种教程,但似乎无法掌握它,因为它们从一开始就缺少一些东西,或者我不太了解逻辑......

还将此推送到GIT:https://github.com/lklancir/WPFexample/tree/master/WPFexample/WPFexample

希望你能指出我正确的方向......

1 个答案:

答案 0 :(得分:1)

如果实际调用GetDataFromApi,它对我有用。将此代码添加到DataModel.cs,gui显示&#34;一些来自WEB API的结果&#34;

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

但这是一个时间问题。如果向任务添加休眠,它将不再起作用,因为没有任何内容传播属性的更改。您应该实现INotifyPropertyChanged或使用DependencyProperties。