0

Windows Phone アプリを作成しています。善良な市民として、私はMVVMパターンを使用しています:) MVVMの専門家ではないため、次の問題に直面しました。ここで解決策を見つけたいと思っています。

次のコードがあります。

XAML

<Grid x:Name="LayoutRoot" Background="Transparent" DataContext="{Binding MyPOCO}">
    <StackPanel>
        <TextBlock Text="{Binding Name}"/>
        <TextBlock Text="{Binding IsActive}"/>
    </StackPanel>
</Grid>

コードビハインド

this.DataContext = new ViewModel();

ビューモデル

public class ViewModel : ViewModelBase
{
    private POCO myPOCO;

    public ViewModel()
    {
        this.myPOCO = new POCO();
        this.ToggleActiveStatusCommand = new RelayCommand(this.ToggleActiveStatus);
    }

    public POCO MyPOCO
    {
        get
        {
            return this.myPOCO;
        }
    }

    public RelayCommand ToggleActiveStatusCommand { get; private set; }

    private void ToggleActiveStatus()
    {
        this.MyPOCO.IsActive = !this.MyPOCO.IsActive;
        System.Diagnostics.Debug.WriteLine(this.MyPOCO.IsActive);
        this.RaisePropertyChanged("MyPOCO");
    }
}

ポコ

public class POCO
{
    public string Name { get; set; }
    public bool IsActive { get; set; }
}

私が達成しようとしているのは、 IsActive の値が変化するにつれて TextBlock テキストを変更することです...どうすればいいですか? つまり、必要なプロパティを POCO からプロパティとして ViewModel に公開する以外のことです。

ありがとう

4

1 に答える 1

0

POCO に INotifyPropertyChanged を実装しない限り、ViewModel に POCO プロパティを呼び出すプロパティを実装する必要があると思います。これは、モデルがデータを保持するだけで、ViewModel がモデルをビューにリンクする接着剤である MVVM に反します。 .

ViewModel でプロパティを作成することは、多くの追加作業のように思えるかもしれませんが、単一のモデルに基づいて多くの ViewModel を定義できるという利点が追加されます。したがって、特定の ViewModel では、モデルが提供できるすべてのプロパティではなく、必要なプロパティのみを公開します。

ViewModel プロパティを定義したら、基になる ViewModel プロパティが変更されたときに UI を更新できるように、バインディングのモードを TwoWay に設定する必要がある場合があります。

于 2012-07-20T11:02:53.610 に答える