WPF无法在组合框中选择启用的项目

时间:2019-03-25 23:09:55

标签: c# wpf data-binding combobox itemcontainerstyle

我正在尝试创建一个组合框,其中启用了选择列表中的某些项目,而禁用了其他项目。在视觉上,我能够执行此操作,但是当我选择一个在视觉上启用的项目时,什么也没有发生。

XAML:

<ComboBox ItemsSource="{Binding EndpointModel.DisplayFormat}" 
          VerticalAlignment="Center" Margin="0,0,10,0" 
          SelectedItem="{Binding EndpointModel.SelectMediaFormat}">
     <ComboBox.ItemContainerStyle>
          <Style TargetType="ComboBoxItem">
              <Setter Property="IsEnabled" Value="{Binding IsEnabled}" />
          </Style>
     </ComboBox.ItemContainerStyle>
     <ComboBox.ItemTemplate>
          <DataTemplate>
              <ComboBoxItem>
                 <TextBlock Text="{Binding Name}" />
              </ComboBoxItem>
          </DataTemplate>
     </ComboBox.ItemTemplate>
</ComboBox>

enter image description here

当我单击上面的所选项目时,什么也没发生-EndpointModel.SelectMediaFormat不执行。

删除 ComboBox.ItemTemplate 节后,我就可以成功选择任何启用的项目,即

<ComboBox ItemsSource="{Binding EndpointModel.DisplayFormat}" 
          VerticalAlignment="Center" Margin="0,0,10,0" 
          SelectedItem="{Binding EndpointModel.SelectMediaFormat}">
     <ComboBox.ItemContainerStyle>
          <Style TargetType="ComboBoxItem">
              <Setter Property="IsEnabled" Value="{Binding IsEnabled}" />
          </Style>
     </ComboBox.ItemContainerStyle>
</ComboBox>

enter image description here

如您所见,我正在显示对象引用。我不知道如何用实际的名称替换上面的内容。

我在WPF刚起步,就像您想象的一样:-)

任何建议将不胜感激。

1 个答案:

答案 0 :(得分:2)

尝试将DisplayMemberPath属性用于Name(要显示的属性)。

<ComboBox ItemsSource="{Binding EndpointModel.DisplayFormat}" 
          VerticalAlignment="Center" Margin="0,0,10,0" 
          SelectedItem="{Binding EndpointModel.SelectMediaFormat}"
          DisplayMemberPath="Name">
     <ComboBox.ItemContainerStyle>
          <Style TargetType="ComboBoxItem">
              <Setter Property="IsEnabled" Value="{Binding IsEnabled}" />
          </Style>
     </ComboBox.ItemContainerStyle>
</ComboBox>