0

在“空白应用程序”(Visual C#,Windows 应用商店)中,我创建了一个新的“分组项页面”,然后声明了一个派生MyItemViewModel自.DependencyObjectString 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 += ".";
    }
}

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

通过添加以下未引用的依赖属性,点将出现:

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只有在有同类型的未使用依赖属性时才刷新item view model的Title属性?

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

4

1 回答 1

1

DependencyObject通常由UIElement继承(例如,Grid、TextBlock 等),它们的属性是DependencyProperty,例如允许绑定。

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

于 2013-05-15T20:42:09.607 回答