У меня есть TreeView, ItemsSource которого привязан к StaticResource, который является классом. У меня это сработало, но теперь у меня есть функция, которая обновляет самый нижний уровень TreeView с возможными разными значениями, и это обновление нужно показать немедленно. Я выполнил аналогичные задачи, такие как привязка IsChecked флажков в дереве к значению в модели, а также привязка текста текстового блока к значениям в модели.
Вот код для справки TreeView в XAML:
<!-- TREE VIEW ON LEFT HAND SIDE. LOADS TREEVIEWPARENTS, WHICH HAVE ORDER ATTRIBUTE CHILDREN -->
<DockPanel Name="test1" Margin="10,10,0,10" VerticalAlignment="Stretch" Grid.Row="3" Grid.RowSpan="6" Grid.Column="0">
<DockPanel.Resources>
<local:CheckBoxCommand x:Key="cbc"></local:CheckBoxCommand>
<src:TreeViewFilter x:Key="MyList" />
<!-- PARENTS OF THE TREEVIEW -->
<HierarchicalDataTemplate DataType="{x:Type src:TreeViewParent}" ItemsSource="{Binding Path=OrderAttributes}">
<TextBlock Text="{Binding Path=NameAndCount}" FontSize="24"/>
</HierarchicalDataTemplate>
<!-- CHILDREN OF THE PARENTS. THESE ORDER ATTRIBUTES HAVE CHILDREN OF THEIR OWN -->
<HierarchicalDataTemplate DataType="{x:Type src:OrderAttribute}" ItemsSource="{Binding Path=OrderAttributes}">
<StackPanel Name="test" Orientation="Horizontal" VerticalAlignment="Center">
<CheckBox Command="{StaticResource cbc}"
CommandParameter="{Binding Path=NameAndParent}" Visibility="{Binding Path=CheckBoxVisible}" IsChecked="{Binding Path=isChecked}" VerticalAlignment="Center">
</CheckBox>
<TextBlock Text="{Binding Path=NameAndCount}" FontSize="16"/>
</StackPanel>
</HierarchicalDataTemplate>
</DockPanel.Resources>
<TreeView Name="treeView1" BorderThickness="2" ItemsSource="{Binding Source={StaticResource MyList}, NotifyOnSourceUpdated=True}" TreeViewItem.Selected="filterByBatchStatus"/>
</DockPanel>
Итак, как вы можете видеть, ItemsSource привязан к StaticResource MyList, который на самом деле является просто ключом для имени класса TreeViewFilter. Причина, по которой это работает для меня, заключается в том, что «TreeViewParents» и «OrderAttributes», содержащиеся в дереве, созданы в конструкторе класса TreeViewFilter. Но теперь я хочу иметь возможность обновлять значения в самой нижней иерархии дерева и отображать их на видном месте.
Я предполагаю, что я могу сделать это аналогично тому, как я делал другие привязки с визуальными обновлениями, используя INotifyPropertyChanged и запуская события propertyChanged или что-то в этом роде? Любые идеи?
(Кроме того, NotifyOnSourceUpdated = True в привязке - это то, с чем я просто возился из-за этой проблемы, не знаю, как это работает)