0

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

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>

在此处输入图像描述

当我单击上面的选定项目时,什么也没有发生 - 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>

在此处输入图像描述

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

正如您所想象的那样,我在 WPF 还是很新的 :-)

任何建议,将不胜感激。

4

1 回答 1

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>
于 2019-03-25T23:28:24.193 回答