【发布时间】:2021-07-14 21:51:38
【问题描述】:
我已经在网上尝试了很多解决方案,但我仍然遇到这个问题。
我有一个组合框,其项目源是自定义类的列表。源中的每个元素都显示为组合框中的复选框。现在我有一个按钮,其"Click" 功能是取消选中所有复选框。
自定义类:
public class LinkObject: INotifyPropertyChanged
{
public int index { set; get; }
public string LO_Name { set; get; }
private bool _checkStatus { set; get; }
public event PropertyChangedEventHandler PropertyChanged;
public void Notify(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
public bool checkStatus
{
get { return _checkStatus; }
set
{
_checkStatus = value;
Notify("IsChecked");
}
}
}
XAML:
<ComboBox Name="cbx1" Grid.ColumnSpan="2" HorizontalAlignment="Left" Margin="126,82,0,0" VerticalAlignment="Top" Width="50" Height="20" IsEditable="True" IsTextSearchEnabled="True" StaysOpenOnEdit="True" TextBoxBase.TextChanged="cbx1_TextChanged">
<ComboBox.ItemTemplate>
<DataTemplate>
<CheckBox Name="cbk1" IsChecked="{Binding checkStatus, Mode=TwoWay}" CommandParameter="{Binding index}" Checked="chk_Checked" Unchecked="chk_Unchecked">
<CheckBox.Content>
<TextBlock Text="{Binding LO_Name}"/>
</CheckBox.Content>
</CheckBox>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
初始化的主函数:
cbx1.ItemsSource = LinkObjectsList_cbx1;
LinkObjectsList_cbx1 是List<LinkObject>。
按钮有一个名字“clearAllTopView”,点击功能是:
private void clearAllTopViewBtn_Click(object sender, RoutedEventArgs e)
{
LinkObjectsList_cbx1.Where(l => l.checkStatus == true).ToList().ForEach(lo => lo.checkStatus = false);
}
但是当我点击按钮时,什么也没有发生。有人可以给我一个提示或建议吗?谢谢。
【问题讨论】:
-
这应该是 checkStatus Notify("IsChecked");
-
@Andy 我确实使用了 Notify("IsChecked")。对不起,我没能明白你的意思,你能再解释一下吗?谢谢
-
对不起,我没说清楚。那应该是您为其提高 propertychange 的检查状态。您使用 viewmodel 属性的名称引发事件。绑定源而不是目标。
-
您可以考虑使用 mvvmlight 来处理 propertychanged 和通知代码,而不是重新创建轮子,而且它还有一个很好的消息服务。
标签: wpf checkbox data-binding combobox