【发布时间】:2013-08-07 15:40:32
【问题描述】:
我有一个用户控件作为我的视图(名为 MyView),它的数据上下文设置为我的视图模型(MyViewModel 类型)的一个实例。
我在视图的代码隐藏中有一个只读属性(即 MVVM-Light sn-p),如下所示:
public MyViewModel Vm
{
get { return (MyViewModel) DataContext; }
}
MyViewModel 有一个名为 Title 的字符串类型的属性,我想通过 XAML 更改它,因为 MyView 被用作 ItemTemplate 的 ListBox。
<ListBox ItemsSource="{Binding MyViewModelCollection}">
<ListBox.ItemTemplate>
<DataTemplate>
<Controls:MyView /> <!-- How do I set Vm.Title property here? -->
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
我该怎么做?
或者也许有更好的方法?
【问题讨论】:
-
你的方法是倒退的。如果您已经有一个 VM 集合,为什么不在该集合的项目中操作此类属性?
-
@HighCore Care 进一步解释一下?我不完全明白。
-
您的列表框项目来自哪里?
MyViewModel的集合,对吧? - 那么,为什么你坚持要改变视图中的数据,而不是视图模型本身呢?您似乎误解了 MVVM 的一些核心概念 -
@HighCore 哦!我之前尝试过,但它并没有那么顺利,所以 SO 中的一些答案让我觉得这是一个更好的选择。那不正确?
-
数据就是数据。用户界面就是用户界面。 UI 显示由 ViewModel 和 Model 公开和提供的数据,而不是相反。
标签: c# wpf xaml data-binding mvvm