如何获取数据模板中复选框的isChecked属性的值
本文关键字:复选框 isChecked 属性 何获取 获取 数据 | 更新日期: 2023-09-27 18:22:12
我有一个名为People的类,它有STRING name
和STRING ImgPath
。我制作了一个LIST
listOfPeople
,它是icCheckBox
的来源。
<DataTemplate x:Key="cBoxTemp">
<StackPanel Orientation="Horizontal" Width="Auto" Height="Auto">
<CheckBox Content="{Binding name}" MouseUp="CheckBox_MouseUp"/>
</StackPanel>
</DataTemplate>
xaml
<ItemsControl Name="icCheckBox" Grid.Column="0" ItemTemplate="{StaticResource cBoxTemp}" Height="Auto" Width="Auto">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel VerticalAlignment="Center" HorizontalAlignment="Center" Orientation="Vertical"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
我想在每次更改复选框时都进行检查,并填充一个新的被选中人员列表。
private void CheckBox_MouseUp(object sender, MouseButtonEventArgs e)
{
// listOfSelectedPeople = new List<Person>();
// For Each (Person e in listOfPeople)
// if(cur.isChecked == true)
// ListofSelectedPeople.add(current);
// ... Once I have this List populated my program will run
}
我无法获取复选框的isChecked
属性,因为它是datatemplate
。我怎么能这么做?
这不是一条路。使用MouseUp不利于MVVM。
您应该绑定到列表中每个元素的PropertyChanged事件。选中propertyName后,侦听虚拟机将为您重新创建选中人员的列表。
class Person //Model
{
public string Name {get;set;}
public string ImgPath {get;set;}
}
class PersonViewModel : INotifyPropertyChanged
{
readonly Person _person;
public string Name {get {return _person.Name;}}
public string ImgPath {get {return _person.ImgPath; }}
public bool IsChecked {get;set;} //implement INPC here
public PersonViewModel(Person person)
{
_person = person;
}
}
class ParentViewModel
{
IList<PersonViewModel> _people;
public ParentViewModel(IList<PersonViewModel> people)
{
_people = people;
foreach (var person in people)
{
person.PropertyChanged += PropertyChanged;
}
}
void PropertyChanged(object sender, PropertyChangedEventArgs e)
{
//Recreate checked people list
}
}
- 您仍然可以通过将sender强制转换为Checkbox来从Checkbox中获取
IsChecked
属性 - 但是,您不应该在
DataTemplate
的代码隐藏中添加事件处理程序 - 建议的方法是使用DataBinding。为Person类创建一个bool属性,并在
DataTemplate
中将IsChecked
绑定到它。在bool属性的setter中,执行填充工作
我建议您使用EventToCommand,将Checked事件绑定到视图模型中的命令,并在命令参数中发送当前People对象。
<CheckBox...>
<i:Interaction.Triggers>
<i:EventTrigger EventName="Checked">
<cmd:EventToCommand Command="{Binding PopulateCommad}"
CommandParameter="{Binding }"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</CheckBox>
EventToCommand参考