1

データを条件付きでコンボ ボックスにバインドするにはどうすればよいですか? デフォルトでIDを表示するコンボボックスがあります。ただし、ユーザーがチェック ボックスをオンにすると、ディスプレイには ID と名前の両方が表示されます。たとえば、「OO1: サム」。デフォルトの ID が正しく表示されています。チェックボックスの「IsChecked」状態に基づいて ID と NAME の両方を表示する方法がわかりません。

WPF および C# .Net 3.5

4

2 に答える 2

3

これが1つの方法で、トリガー付きのComboBoxのスタイルを使用して、ItemTemplateを動的に設定します。

編集:スタイルをリソースに変更します。これは、要素バインディングを使用して直接CheckBoxにバインドしていることに注意してください。より柔軟にしたい場合は、CheckBoxのIsCheckedプロパティをViewModelのプロパティにバインドし、IsCheckedではなくその変更に依存することができます。

スタイルをウィンドウの[リソース]セクションに移動してみましょう。

<Window.Resources>
    <Style x:Key="myStyle" TargetType="ComboBox">
        <Setter Property="ItemTemplate">
            <Setter.Value>
                <DataTemplate>
                    <StackPanel>
                        <TextBlock Text="{Binding Name}" />
                    </StackPanel>
                </DataTemplate>
            </Setter.Value>
        </Setter>

        <Style.Triggers>
            <DataTrigger Binding="{Binding IsChecked,ElementName=chk}" Value="True">
                <Setter Property="ItemTemplate">
                    <Setter.Value>
                        <DataTemplate>
                            <StackPanel Orientation="Horizontal">
                                <TextBlock Text="{Binding ID}" />
                                <TextBlock Text=": " />
                                <TextBlock Text="{Binding Name}" />
                            </StackPanel>
                        </DataTemplate>
                    </Setter.Value>
                </Setter>
            </DataTrigger>
        </Style.Triggers>
    </Style>
</Window.Resources>

次に、CheckBoxとそれに依存するいくつかのComboBoxを定義します。

<CheckBox x:Name="chk" Content="Click Me" />

<ComboBox ItemsSource="{Binding}" Style="{StaticResource myStyle}" />

<ComboBox ItemsSource="{Binding}" Style="{StaticResource myStyle}" />
于 2010-10-26T22:24:17.533 に答える
1

ViewModelでそれを行います。コンボ ボックス項目用のビューモデル、チェックボックスが存在する画面用の別のビューモデル、および値が変更されたときにチェックボックス ビューモデルが項目ビューモデルに通知する何らかの方法を使用できます。次に、アイテムのビューモデルは、その Text プロパティ (またはそれを呼び出すもの) に条件付きロジックを持ち、通常の INotifyPropertyChanged パターンを実装して、テキストが変更されたときに UI に通知します。

利点: この方法で、この動作の単体テストを作成できます。(そして、それを入れる価値があるなら、単体テストを書く価値があります。)

于 2010-10-26T22:32:33.507 に答える