对于ItemsControl

时间:2017-06-28 18:06:06

标签: c# wpf xaml binding togglebutton

我见过许多类似于我的问题,但没有一个能解决或解决我的问题。

我所拥有的是一组存在于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。这是一个简单的黑客,几乎没有开销和四行代码,但并没有真正回答原始问题。

0 个答案:

没有答案