我见过许多类似于我的问题,但没有一个能解决或解决我的问题。
我所拥有的是一组存在于ItemsControl内部的切换按钮,这些切换按钮是在运行时根据ItemsControl的ItemSource绑定的索引内部的人数动态创建的。在UI中单击这些切换按钮时,将根据此人的姓名进行一些过滤。如果需要,可以选择多个按钮甚至所有按钮。还有一个“清除”按钮,它只是删除所有过滤,并应重置切换按钮IsClicked状态。
我的问题是,当我点击清除按钮时,所有点击的切换按钮都会被点击。我试图让清除按钮将每个ToggleButton的IsClicked值重置为false,方法是将IsClicked值绑定到代码中管理的属性,但无论我尝试什么,我都无法使其工作。
代码:
的Xaml
<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>
c#ViewModel:
private void ClearClick(object sender, RoutedEventArgs e)
{
this.m_viewModel.ClearFiltering();
}
C#型号:
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;
}
我很困惑。我觉得绑定不起作用的原因是切换按钮是在ItemsControl内动态创建的,但我不确定这是错误的,或者如果它是如何解决它。
我能够通过对ToggleButtons ItemsControl绑定的可观察集合的数据进行交换和交换来解决这个问题,这会触发整个切换按钮集合的OnPropertyChanged,从而重置该部分。 UI。这是一个简单的黑客,几乎没有开销和四行代码,但并没有真正回答原始问题。