我想在我的项目中开始使用 MVVM,所以我开始研究它。当我在 WPF 上玩了一下时,我遇到了一个错误,我自己和探索互联网时都找不到他的解决方案。
我有类似的东西(我无法粘贴我的完整代码,因为它不在同一个网络中):
主视图.Xaml
<ListBox ItemsSource="{Binding Persons}">
<ListBox.ItemTemplate>
<DataTemplate>
<CheckBox Content="{Binding Name}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Checked">
<my:AddToInvitation />
</i:EventTrigger>
<i:EventTrigger EventName="Unchecked">
<my:RemoveFromInvitation />
</i:EventTrigger>
</i:Interaction.Triggers>
</CheckBox>
</DataTemplate>
</ListBox.ItemTemplate>
主视图模型.cs
public ObservableCollection<PersonViewModel> Persons { get; set; }
public MainViewModel()
{
this.Persons = new ObservableCollection<PersonViewModel>();
for(int i=0;i<1000;i++)
{
PersonViewModel personVM = new PersonViewModel (string.Format("Person - {0}",i));
this.Persons.add(personVM);
}
}
PersonViewModel.cs
private Person PersonObject { get; set; }
public string Name
{
get
{
return this.PersonObject.Name;
}
}
public PersonViewModel(string personName)
{
this.PersonObject = new Person(personName);
}
个人.cs
public string Name { get; set; }
public Person(string name)
{
this.Name = name;
}
现在,如果您尝试粘贴并运行它,它看起来会很好。问题是当您尝试以下说明时:
1) Check the first 10 persons in the ListBox.
2) Scroll down the ListBox to the bottom of it.
3) Leave the mouse when the list box is scrolled down.
4) Scroll back up to the top of the ListBox.
5) Poof! you'r checking disappeared.
现在我找到的解决方案是将 IsChecked 属性(虽然我并不真正需要它)添加到 PersonViewModel 并将其绑定到 CheckBox IsChecked DependencyProperty,但随后我添加了一个功能,让用户按下按钮它将遍历 ListBox 中的所有人员并将其 IsChecked 属性更改为 true(Button -> Select all)。在消失检查错误之后,我遇到了另一个错误,我认为它以某种方式与消失的检查有关 - 我在发生检查和取消检查时触发的操作只会在您全选时触发某些复选框。
如果你不尝试它有点难以理解这个错误,所以只有当你尝试过时才请在这里评论。
提前致谢!