:ItemsがItemsSourceコレクションの一部でない場合、ComboBoxのSelectedItemを設定するにはどうすればよいですか?シナリオに続き
<ComboBox ItemsSource="{Binding Path=Names}"
SelectedItem="{Binding Path=Name, UpdateSourceTrigger=PropertyChanged}">
</ComboBox>
名前はViewModelにでコードを変更する可能性がある文字列のコレクションです。たとえば、名前は男性名(John、Paul、George)または女性名(Mary、Jane、Karen)のいずれかに設定できます。
オスのコレクションがアクティブで、ユーザーが "John"を選択してSelectedItemにするとします。今コレクションは女性の名前に変わります。デフォルトでは、SelectedItemはNullに設定され、Johnはこれ以上表示されません。代わりに、空の文字列が表示されます。
私が達成したいのは、 "John"がSelectedItemとして表示されていることです。これはもはやコレクションに含まれていません。しかし、コレクションの一部ではないので、SelectedItemの色を赤に変更したいと思います。
私はIsEditableプロパティで遊んでいましたが、ComboBoxの外観が変わっているのが好きではありませんでした。とにかくユーザーは手動でテキストを入力するべきではありません。
さまざまなテンプレートとスタイル(Template、ItemTemplate、ItemContainerStyleなど)を使用しようとしましたが、私の好みに合わせて使用する方法が見つかりませんでした。
提供されているComboBoxを必要な方法でスタイルすることはできますか、独自のユーザーコントロールを作成する必要はありますか?
編集: 私は私と一緒に暮らすことができる解決策を見つけました。 ViewModelには
<ComboBox IsEditable="True" IsReadOnly="True"
ItemsSource="{Binding Path=Names}"
Text="{Binding Path=Name}">
<ComboBox.Style>
<Style TargetType="{x:Type ComboBox}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsNameInCollection}" Value="False">
<Setter Property="Foreground" Value="Red"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ComboBox.Style>
<ComboBox.ItemContainerStyle>
<Style TargetType="{x:Type ComboBoxItem}">
<Setter Property="Foreground" Value="Black"/>
</Style>
</ComboBox.ItemContainerStyle>
</ComboBox>
私はとき名コレクションが変更名プロパティが変更されないことを確認してください。ブール型プロパティIsNameInCollectionは、の名前のプロパティまたはコレクションが変更されたときに更新されます。
基本的に1つのコンボボックスが2つのコンボボックスを使用するようにしたいのですか? – TMan
実際は上記の例では2つしかありません。実際のアプリケーションでは、私はさまざまなコレクションを持っています。 – UdoG