0

Windows Phone で MVVMlight を使用しています。モデルは、ロケーターを介して xaml 経由でバインドされます。ビュー モデルは、webrequest からモデルの新しいインスタンスを読み込み、それを割り当てます。ビューが更新されていない理由がわかりません。新しいインスタンスが割り当てられているためですか? 新しいインスタンスを割り当てる代わりにモデルのプロパティを更新すると、ビューで更新されます。

モデルの新しいインスタンスを割り当てるときにビューを更新するにはどうすればよいですか?

モデルを見る:

public class MyViewModel : ViewModelBase
{
    public MyModel Model { get; set; }

    public MyViewModel ()
    {
        if (IsInDesignMode)
        {
        }
        else
        {
            //async call
            api.GetModel(response =>
                                 Deployment.Current.Dispatcher.BeginInvoke
                                     (() =>
                                          {
                                              //this works.
                                              //Model.Property1 = "Some Text";
                                              //this doesn't work
                                              Model = response.Data;

                                          }
                                     ));
        }
    }
}

View.xaml

<UserControl x:Class="Grik.WindowsPhone.CardDetailsView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    DataContext="{Binding MyModel, Source={StaticResource Locator}}" >

    <Grid x:Name="LayoutRoot" >
        <TextBlock Text="{Binding Model.Property1}" />

    </Grid>
</UserControl>
4

2 に答える 2

0

あなたのコードをView Model Locatorクラスで見たいです

MyViewModel クラスでは、このプロパティを書き換える必要がある場合があります

public MyModel Model { get; set; }

private MyModel _model; 
public MyModel Model { 
get{return this._model;}
set{
    this._model = value;
    this.NotifyPropertyChanged("Model");
}
}
于 2013-04-01T20:17:17.503 に答える
0

INotifyPropertyChangedViewModel はインターフェイスを実装していません。およびMyModelそのすべてのプロパティは、プロパティ変更イベントも使用する必要があります。

Model.Property1xamlで使用することを示しModel.Property1、プロパティ変更イベントも発生させる必要があります。

public class MyModel : INotifyPropertyChanged
{
    private string _Property1 = "";

     public string Property1
    {
        get { return this._Property1; }

        set
        {
            if (value != this._Property1)
            {
                this._Property1 = value;
                NotifyPropertyChanged();
            }
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }      
}
于 2013-03-29T20:48:00.070 に答える