我觉得这个问题真的很蠢,但是我已经打了八个多小时。如何选中时,如何让选定项目在我的WPF组合框中显示其文本?
上面是一个选项对话框,允许用户选择和配置可用的锦标赛显示。问题是所选的组合框项目显示UserControl而不是显示名称。
加载窗口:
//_displayer is a private member populated using MEF
//[ImportMany(typeof (IDisplayer))]
//private IEnumerable<IDisplayer> _displayers;
DisplayTypeComboBox.ItemsSource = _displayers;
ComboBox Xaml:
<ComboBox
Name="DisplayTypeComboBox"
Grid.Column="1"
Grid.ColumnSpan="2"
Grid.Row="1"
IsEditable="False"
SelectionChanged="DisplayTypeComboBox_SelectionChanged">
<ComboBox.ItemTemplate>
<DataTemplate>
<ComboBoxItem Content="{Binding DisplayerName}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
IDisplayer:
public interface IDisplayer
{
string DisplayDataLocation { get; set; }
string DisplayerName { get; }
string DisplayerDescription { get;}
bool WatcherEnabled { get; }
UserControl View { get; }
string DisplayerImageLeft { get; set; }
string DisplayerImageRight { get; set; }
void Update();
}
答案 0 :(得分:1)
答案 1 :(得分:0)
尝试使用TextBlock绑定到DisplayerName而不是ComboboxItem。我相信当你设置itemsource时,组合控件会自动将项目包装在comboboxitems控件中。
编辑:我误解了你的问题。尝试设置SelectionBoxItemTemplate。
答案 2 :(得分:0)
检查DisplayerName成员实际包含的内容。它很可能包含UserControl名称而不是显示名称。
答案 3 :(得分:0)
我甚至不想想我花了多少时间来解决应该是一个简单的问题。为什么难以让所选文本显示为所选值?我放弃了,WPF你已经打败我了。我将控件更改为列表框,它占用了更多空间来显示可选项,但至少它可以工作。
<ListBox
Name="DisplayTypeComboBox"
Grid.Column="1"
Grid.ColumnSpan="2"
Grid.Row="1"
SelectionChanged="DisplayType_SelectionChanged">
<ListBox.ItemTemplate>
<DataTemplate>
<Label Content="{Binding DisplayerName}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>