使用LayoutAwarePage.DefaultViewModel时,GridView不会刷新项目的更改

时间:2013-05-15 18:11:10

标签: xaml binding windows-8 viewmodel dependency-properties

在“空白应用程序”(Visual C#,Windows应用商店)中,我创建了一个新的“分组项目页面”,然后声明一个MyItemViewModel类派生自DependencyObject,具有一个{的依赖属性{1}}。

这是页面的LoadState方法:

String Title

期望每秒在项目标题后面出现点。实际输出只是“我的标题”而没有其他事情发生。

通过添加以下未引用的依赖项属性,将显示点:

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 += ".";
    }
}

为什么GridView只在具有相同类型的未使用依赖项属性时刷新项目视图模型的Title属性?

视图模型类是否必须至少在应用程序中的某处显式声明为依赖项属性?

1 个答案:

答案 0 :(得分:1)

DependencyObject通常由UIElement继承(例如,Grid,TextBlock等),其属性为DependencyProperty,例如允许绑定。

ViewModel应该实现INotifyPropertyChanged而不是从DependencyObject继承。如果您查看GridApp等示例模板,您会看到BindableBase实现了INotifyPropertyChanged。