更新selecteditem时,WPF Combobox selectedvalue不会更新

时间:2011-08-23 09:31:04

标签: wpf binding combobox selectedvalue

有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会更改为此值。如果我更改集合Item中的Name属性,则更改组合框selectedItem(我看到DisplayMemberPath更改为新值),但选择值不会更改,直到我再次手动选择此项目。 Name属性集合元素调用PropertyChanged事件。 为什么这不起作用。

总结:当我在comboxo SelectedItem programicaly中更改NameProperty时,组合框SelectedItem被更改,但SelectedValue不会更新,直到我再次在组合框中更改它。

1 个答案:

答案 0 :(得分: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。另一件事是确保首先在加载视图模型中设置初始值,然后只更改SelectedItem。