0

「空のアプリ」(Visual C#、Windows ストア) で、新しい「グループ化されたアイテム ページ」を作成MyItemViewModelDependencyObjectString Title.

これは、ページの LoadState メソッドです。

protected async override void LoadState(Object navigationParameter, Dictionary<String, Object> pageState)
{
    this.DefaultViewModel["Groups"] = this.items;
    this.items.Add(new MyItemViewModel { Title = "My Title" });

    for (int i = 0; i < 5; i++)
    {
        await Task.Delay(1000);
        this.items.First().Title += ".";
    }
}

アイテムのタイトルの後に毎秒ドットが表示されることが期待されます。実際の出力は単に「My Title」で、それ以外は何も起こりません。

次の参照されていない依存関係プロパティを追加すると、ドットが表示されます。

public MyItemViewModel blah
{
    get { return (MyItemViewModel)GetValue(blahProperty); }
    set { SetValue(blahProperty, value); }
}

public static readonly DependencyProperty blahProperty =
        DependencyProperty.Register("blah", typeof(MyItemViewModel), typeof(GroupedItemsPage1), new PropertyMetadata(0));

同じ型の未使用の依存関係プロパティがある場合、GridView がアイテム ビュー モデルの Title プロパティのみを更新するのはなぜですか?

ビュー モデル クラスは常に、アプリのどこかで少なくとも 1 回は依存関係プロパティとして明示的に宣言する必要がありますか?

4

1 に答える 1

1

DependencyObjectは通常、UIElement (例: Grid、TextBlock など) によって継承され、それらのプロパティは、たとえば Binding を可能にするDependencyPropertyです。

ViewModel は、DependencyObject から継承するのではなく、INotifyPropertyChangedを実装する必要があります。GridApp などのサンプル テンプレートを見ると、BindableBase が INotifyPropertyChanged を実装していることがわかります。

于 2013-05-15T20:42:09.607 に答える