C# 已检查ItemsControl中所有切换按钮与的XAML绑定
我见过许多与我类似的问题,但没有一个能解决我的问题 我拥有的是一组存在于ItemsControl中的切换按钮,这些切换按钮是在运行时根据ItemsControl的ItemSource绑定到的索引中的人数动态创建的。在UI中单击这些切换按钮时,会根据人员的姓名进行一些过滤。如果需要,可以选择多个按钮甚至所有按钮。还有一个“清除”按钮,它简单地删除所有过滤,并应重置切换按钮的单击状态 我的问题是,当我单击“清除”按钮时,所有被单击的切换按钮都保持单击状态。我试图通过将IsClicked值绑定到代码中管理的属性,让clear按钮将每个ToggleButton的IsClicked值重置为false,但无论我尝试什么,我都无法使其工作 代码: Xaml C#模型: 我被卡住了。我觉得绑定不起作用的原因是切换按钮是在ItemsControl中动态创建的,但我不确定这是否是错误的,或者如果是,如何修复它 更新C# 已检查ItemsControl中所有切换按钮与的XAML绑定,c#,wpf,xaml,binding,togglebutton,C#,Wpf,Xaml,Binding,Togglebutton,我见过许多与我类似的问题,但没有一个能解决我的问题 我拥有的是一组存在于ItemsControl中的切换按钮,这些切换按钮是在运行时根据ItemsControl的ItemSource绑定到的索引中的人数动态创建的。在UI中单击这些切换按钮时,会根据人员的姓名进行一些过滤。如果需要,可以选择多个按钮甚至所有按钮。还有一个“清除”按钮,它简单地删除所有过滤,并应重置切换按钮的单击状态 我的问题是,当我单击“清除”按钮时,所有被单击的切换按钮都保持单击状态。我试图通过将IsClicked值绑定到代码中
我能够通过交换ToggleButtons ItemsControl绑定到的可观察集合的数据来解决这个问题,这触发了整个toggle buttons集合的OnPropertyChanged,从而重置了UI的该部分。这是一个简单的黑客攻击,几乎没有开销和四行代码,但并没有真正回答最初的问题 对
peopleSorted
中的每个项目调用ClearFiltering()
的代码在哪里?我认为您需要类的确切实例才能更改这些值。如果没有确切的实例,则值不会更改。为了能够完全理解您的问题,请提供与您的问题相关的完整代码。我尝试包含更多代码。ClearFiltering()只清除UI上的一些颜色,它不在peopleSorted上运行,也不需要。这工作正常,与我的切换按钮问题无关,因此不会显示执行此操作的代码。对于每个项目,ToggleButton.IsChecked
绑定到该项目的IsChecked
属性,该属性由该项目的ClearFiltering()
方法清除。您写道,“还有一个“清除”按钮,它可以简单地删除所有过滤,并应重置切换按钮的单击状态。”您试图解决的问题是什么?模型和viewmodel是不同的类吗?是否每个类都有一个完全不相关的IsChecked
属性,而您正在清除错误的属性?@否IsChecked对于每个类来说都不是不相关的,是的,model和viewmodel是独立的类。我在模型中有很多绑定属性,它们的实现方式与我检查的方式相同,可以很好地工作。如果这不清楚,很抱歉,但问题是ClearFiltering方法应该重置切换按钮,但没有。根据您的评论,是否应将IsChecked命名为其他名称?您让它听起来像是我在将切换按钮的属性绑定到它自己,其中是对peopleSorted
中的每个项目调用ClearFiltering()
的代码?我认为您需要类的确切实例才能更改这些值。如果没有确切的实例,则值不会更改。为了能够完全理解您的问题,请提供与您的问题相关的完整代码。我尝试包含更多代码。ClearFiltering()只清除UI上的一些颜色,它不在peopleSorted上运行,也不需要。这工作正常,与我的切换按钮问题无关,因此不会显示执行此操作的代码。对于每个项目,ToggleButton.IsChecked
绑定到该项目的IsChecked
属性,该属性由该项目的ClearFiltering()
方法清除。您写道,“还有一个“清除”按钮,它可以简单地删除所有过滤,并应重置切换按钮的单击状态。”您试图解决的问题是什么?模型和viewmodel是不同的类吗?是否每个类都有一个完全不相关的IsChecked
属性,而您正在清除错误的属性?@否IsChecked对于每个类来说都不是不相关的,是的,model和viewmodel是独立的类。我在模型中有很多绑定属性,它们的实现方式与我检查的方式相同,可以很好地工作。如果这不清楚,很抱歉,但问题是ClearFiltering方法应该重置切换按钮,但没有。根据您的评论,是否应将IsChecked命名为其他名称?你让它听起来像我是绑定属性的切换按钮本身
<Button Content="Clear Filter" HorizontalAlignment="Center" Margin="0,0,0,1" VerticalAlignment="Bottom" Grid.Column="1" Click="ClearClick"/>
<ItemsControl ItemsSource="{Binding Source={StaticResource peopleSorted}}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<ToggleButton Name="toggleButton" Margin="0,0,5,0" Command="ApplicationCommands.Open"
CommandParameter="{Binding Name}" IsChecked="{Binding IsChecked, Mode=TwoWay}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Name}" />
</StackPanel>
</ToggleButton>
</DataTemplate>
</ItemsControl.ItemTemplate>
private void ClearClick(object sender, RoutedEventArgs e)
{
this.m_viewModel.ClearFiltering();
}
public bool IsChecked
{
get
{
return this.m_isChecked;
}
set
{
this.m_isChecked = value;
this.OnPropertyChanged("IsChecked");
}
}private bool m_isChecked;
public void ClearFiltering()
{
m_hashTable.Clear();
this.IsChecked = false;
}