【发布时间】:2011-12-14 16:59:38
【问题描述】:
请帮助我更好地理解 MVVM:
我一直在将列表框绑定到自定义对象列表,但后来在多选列表中正确填充/绑定所选项目时遇到了一些麻烦。
我发现的解决方案只为那个列表框使用了一个 List,(或者至少我是这么理解的),然后 viewmodel 类可以有一个 IsSelected 属性,这对我有用。
我的问题是:将列表框绑定到视图模型列表是否常见?看起来很奇怪,如果 ti 正常,是否将列表框绑定到业务对象列表是不好的 MVVM 技术?
最后,当我将一个列表框绑定到这个视图模型列表时,它们通常如何链接回它们所代表的业务对象列表?我应该在视图模型中保留一个 id,还是对业务对象本身的引用?很抱歉这些问题,但我正在努力学习 MVVM 并做对。
这是我放入列表并绑定到列表框的视图模型:
class ItemViewModel
{
public ItemViewModel(string name)
{
Name = name;
}
public string Name { get; private set; }
bool isSelected;
public bool IsSelected
{
get {
return isSelected;
}
set {
isSelected = value;
}
}
}
这是视图中列表框的 xaml
<ListBox Height="401" ItemsSource="{Binding Path=Users}" ItemTemplate="{StaticResource listBoxTemplate}" SelectionMode="Multiple" HorizontalAlignment="Left" Margin="202,29,0,0" Name="lbxAuthorizedUsers" VerticalAlignment="Top" Width="154" >
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="IsSelected" Value="{Binding Mode=TwoWay, Path=IsSelected}"/>
</Style>
</ListBox.ItemContainerStyle>
</ListBox>`
这是视图模型中的用户属性
public List<ItemViewModel> Users
{
get { return this.users; }
set { this.users = value; }
}
【问题讨论】:
-
WPF、Silverlight 还是 WP7?
-
WPF,加了标签,觉得没关系。
-
我认为这也不重要;我只是出于好奇而问:)
-
如果用户列表可以在运行时更改,则使用 ObservableCollection
。如果 ItemViewModels 属性可以更改,则实施 INotifyPropertyChanged。除此之外,您的代码乍一看还不错。
标签: c# wpf binding mvvm listbox