Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用户界面未根据ObservableCollection更改进行更新_C#_Wpf_Checkbox_Treeview_Observablecollection - Fatal编程技术网

C# 用户界面未根据ObservableCollection更改进行更新

C# 用户界面未根据ObservableCollection更改进行更新,c#,wpf,checkbox,treeview,observablecollection,C#,Wpf,Checkbox,Treeview,Observablecollection,我想完成以下任务: 使用复选框显示资源(如汽车、房间等)的树状视图,以选择项目或全部项目 为此,我有一个字典,用作TreeView的项目资源 以及一个多重绑定,用于数据模板内的复选框,其中一个绑定到资源的Id,另一个绑定到所选资源可观察收集。 我的问题是,在代码隐藏中将资源对象添加到选定的资源集合时,其复选框仍处于未选中状态(未调用Convert方法), 但所选资源集合包含它 为什么复选框仍处于未选中状态 编辑: Add()和Remove()方法不起作用,但当我分配一个新的observed

我想完成以下任务:

使用
复选框显示资源(如汽车、房间等)的
树状视图
,以选择项目或全部项目

为此,我有一个
字典
,用作
TreeView的
项目资源
以及一个
多重绑定
,用于
数据模板
内的
复选框
,其中一个绑定到资源的Id,另一个绑定到所选资源
可观察收集


我的问题是,在代码隐藏中将资源对象添加到选定的资源集合时,其
复选框
仍处于未选中状态(未调用
Convert
方法), 但所选资源集合包含它

为什么
复选框仍处于未选中状态

编辑:
Add()
Remove()
方法不起作用,但当我分配一个新的
observedcollection
时,它包含旧的选定资源集合加上/减去我想要添加/删除的资源集合,效果很好。但是我也可以使用一个普通的
列表

您的问题之一是,您用作
项目资源的
词典
没有实现
INotifyCollectionChanged
接口。另一个可能是您没有实现包含所有必需属性的
INotifyPropertyChanged
接口的特定数据类型类

要解决此问题,请首先为实现
INotifyPropertyChanged
接口的数据项定义一个适当的视图模型类,包括它将需要的所有必需属性。然后,为这些对象创建一个
ObservableCollection
,并将其绑定到
ListBox.ItemsSource
属性。然后,当您向内部集合添加项或进行任何属性更改时,您将看到预期的UI更新

<TreeView Grid.Row="1" ItemsSource="{Binding Path=Category2ResourcesDictionary}" >
            <TreeView.ItemTemplate>
                <HierarchicalDataTemplate ItemsSource="{Binding Path=Value}">
                    <TextBlock Text="{Binding Path=Key}" />
                    <HierarchicalDataTemplate.ItemTemplate>
                        <DataTemplate>
                            <CheckBox Content="{Binding}" PreviewMouseDown="RessourcenTV_OnClick">
                                <CheckBox.IsChecked>
                                    <MultiBinding Converter="{StaticResource CheckBoxConverter}" UpdateSourceTrigger="PropertyChanged" NotifyOnSourceUpdated="True">
                                        <Binding Path="ResourceId" Mode="OneWay" />
                                        <Binding Path="SelectedResources" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged" RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type Window}}" />
                                    </MultiBinding>
                                </CheckBox.IsChecked>
                            </CheckBox>
                        </DataTemplate>
                    </HierarchicalDataTemplate.ItemTemplate>
                </HierarchicalDataTemplate>
            </TreeView.ItemTemplate>
        </TreeView>