所以我有一个 TreeView,它具有层次结构的数据模板,在最低层有 CheckBoxes。这些 CheckBox 绑定到 ViewModel 中的“isChecked”布尔值。我一直在尝试做的是加载各种变量,向我指示要检查哪些复选框,将模型中的布尔值 isChecked 更改为 true,从而导致 TreeView 中的特定 CheckBoxes 在视觉上更新。这是我的参考代码:
XAML:(我正在使用的 TreeView)
<DockPanel Name="test1" Margin="10,10,0,10" VerticalAlignment="Stretch" Grid.Row="3" Grid.RowSpan="7" Grid.Column="0">
<DockPanel.Resources>
<local:CheckBoxCommand x:Key="cbc"></local:CheckBoxCommand>
<src:TreeViewFilter x:Key="MyList" />
<HierarchicalDataTemplate DataType="{x:Type src:TreeViewParent}" ItemsSource="{Binding Path=OrderAttributes}">
<TextBlock Text="{Binding Path=NameAndCount}" FontSize="24"/>
</HierarchicalDataTemplate>
<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, Mode=TwoWay}" VerticalAlignment="Center">
</CheckBox>
<TextBlock Text="{Binding Path=NameAndCount}" FontSize="16"/>
</StackPanel>
</HierarchicalDataTemplate>
</DockPanel.Resources>
<TreeView Name="treeView1" BorderThickness="2" ItemsSource="{Binding Source={StaticResource MyList}, UpdateSourceTrigger=PropertyChanged}" TreeViewItem.Selected="filterByBatchStatus"/>
</DockPanel>
ViewModel 中的 C# 代码(与问题有关):
public event PropertyChangedEventHandler PropertyChanged2;
protected void FirePropertyChanged2(string CheckBoxChecked)
{
if (PropertyChanged2 != null)
{
PropertyChanged2(this, new PropertyChangedEventArgs(CheckBoxChecked));
}
}
public static bool cbc;
public bool CheckBoxChecked
{
get { return (bool)GetValue(CheckBoxCheckedProperty); }
set { SetValue(CheckBoxCheckedProperty, value); }
}
public static readonly DependencyProperty CheckBoxCheckedProperty =
DependencyProperty.Register("CheckBoxChecked", typeof(bool), typeof(OrderAttribute), new UIPropertyMetadata((bool)false));
bool _isChecked;
public bool isChecked
{
get { return _isChecked; }
set
{
if (_isChecked != value)
{
_isChecked = value;
FirePropertyChanged2("CheckBoxChecked");
}
}
}
如果我加载值,更新布尔值,然后展开树(这样我可以直观地看到它们),就会选中正确的复选框并且一切正常。当我最初在视觉上看到第一个加载的复选框后加载不同的复选框时,问题就出现了,更改布尔值,然后复选框不会相应更改(根本不更改)。
让我难过的部分是,如果我进行多次加载,一遍又一遍地更改布尔值,而不展开树并视觉看到框,然后展开树,则检查正确的框。只要我可以直观地展开并看到复选框,任何帖子加载都不会更新复选框,无论我是否展开或取消展开树。