したがって、最下層にチェックボックスを持つ階層型データ テンプレートを持つ TreeView があります。これらの 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");
}
}
}
値をロードし、ブール値を更新してからツリーを展開すると (視覚的に確認できるようになります)、正しいチェックボックスがチェックされ、すべて正常に動作します。問題は、最初にロードされたチェックボックスを最初に視覚的に確認した後に別のチェックボックスをロードし、ブール値を変更すると、それに応じてチェックボックスが変化しない場合に発生します(まったく変化しません)。
私を悩ませているのは、複数のロードを行い、ツリーを展開せずにボックスを視覚的に表示せずにブール値を何度も変更してから、ツリーを展開すると、正しいボックスがチェックされることです。チェックボックスを視覚的に展開して表示できるようになるとすぐに、ツリーを展開するか展開解除するかに関係なく、投稿の読み込みによってチェックボックスが更新されません。