0

私は、アイテムごとItemsSourceに作成するTreeView にバインドしています。CheckBoxxaml は次のとおりです。

<TreeView x:Name="ReasonTreeView" Height="Auto" Background="Transparent"
        BorderThickness="0" IsTabStop="False"
        ItemsSource="{Binding Path=AnswerOptions}">
<TreeView.ItemTemplate>
    <HierarchicalDataTemplate DataType="{x:Type QSB:Answer}" ItemsSource="{Binding Path=AnswerOptions}">
        <StackPanel Orientation="Horizontal">
            <CheckBox Margin="0,5"
                        IsChecked="{Binding Path=IsSelected}"
                        IsEnabled="{Binding Path=Value,
                                            Converter={StaticResource ReasonValueToEnabledConverter}}"
                        Visibility="{Binding Path=AnswerOptions,
                                            Converter={StaticResource ParentNodeVisConverter}}" />
        </StackPanel>
    </HierarchicalDataTemplate>
</TreeView.ItemTemplate>

私のアプリケーションでは、これらの複数のインスタンスを作成します。のインスタンスによってはTreeView、ユーザーが選択できないように無効にする必要がありますが、コードCheckBoxes内の個々の項目にアクセスする方法がわかりません。HierarchicalDataTemplate

しばらく見回した後、私が考えることができる唯一のことはTreeView、xaml の代わりにコード ビハインドで全体を構築することですが、むしろそれに頼る必要はありません。他にできることはありますか?

私の要点を明確にするために、また説明のために、これは基本的に私ができるようにしたいことです(疑似コードで):ReasonTreeView.ItemsSource[5].IsEnabled = false;

のインデックス5でCheckBox(およびその中の他のコントロール)を無効にしますHierarchicalDataTemplateItemTreeViewItemsSource

さらに情報が必要な場合はお知らせください

4

2 に答える 2

1

チェックボックスの isenabled プロパティ Path=Value へのバインドを意味していました。その Value メンバーは bool で INotifyPropertyChanged を実装する必要があり、モデルから IsEnabled を制御できます。バインディングに Mode=Twoway を追加することを忘れないでください

于 2013-03-29T16:56:38.060 に答える
0

Control.ItemsSource プロパティを介して CheckBox にアクセスする代わりに、基になるコレクション (つまり、コントロールの itemssource) を変更する必要があります。変更を行った後、データが変更されたことをビュー (コントロール) に通知して、コントロールを更新します。

基になるクラスに実装INotifyPropertyChangedし、プロパティ (有効/無効を担当する) の値を変更した後、ビューに通知します。

データ バインディングと INotifyPropertyChanged の概念に慣れていない場合は、基本的なチュートリアルを読むことをお勧めします。これは、あなたのようなことをするのを非常に簡単にするWPFの主要な機能の1つです

于 2013-03-29T16:50:48.273 に答える