0

コンボボックスにバインドする Observable コレクションがあります。

public ObservableCollection<AnyType> AnyTemplates { get; set; }

そして、このコレクションにバインドするコンボボックス:

<ComboBox Name="cmbKeyA" 
          Width="100" 
          SelectedValue="{Binding Path=KeyAName}"
          ItemsSource="{Binding Path=DataContext.KeyTemplates, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" 
          DisplayMemberPath="Name" 
          SelectedValuePath="Name"/>

最初のコレクションは空です。次に、コレクションに新しい値を追加すると、checkBox selectedItem がこの値に変更されます。コレクションアイテムの Name プロパティを変更すると、コンボボックスの selectedItem が変更されます (DisplayMemberPath が新しい値に変更されるのがわかります) が、このアイテムを手動で再度選択するまで、選択された値は変更されません。Name プロパティ コレクション要素は、PropertyChanged イベントを呼び出します。なぜこれが機能しなかったのか。

概要: プログラムでコンボボックス SelectedItem の NameProperty を変更すると、コンボボックスの SelectedItem が変更されますが、コンボボックスで再度手動で変更するまで SelectedValue は更新されません。

4

1 に答える 1

0

ComboBoxにItemStyleコンテナを使用して、次のようになります。

<ComboBox Name="cmbKeyA" 
          Width="100" 
          SelectedValue="{Binding Path=KeyAName}"                           
          ItemsSource="{Binding AnyTemplates}"                            
          DisplayMemberPath="Name" 
          SelectedValuePath="Name">
    <ComboBox.ItemContainerStyle>
        <Style TargetType="{x:Type ComboBoxItem}">
            <Setter Property="IsSelected" Value="{Binding Path=IsCurrent, Mode=TwoWay}"/>
        </Style>
    </ComboBox.ItemContainerStyle>
</ComboBox>

また、NotifyPropertyChangedを使用してすべてを実行し、DataContextを設定したことを確認してください。もう1つの注意点は、ロード時にビューモデルに初期値を設定してから、SelectedItemだけが変更されることを確認することです。

于 2012-08-02T11:05:50.400 に答える