我正在寻找解决问题的技巧或解决方案。也许你们其中一个人可能会给我一些建议?
结构
所以我的组合框的代码如下:
<GridViewColumn Header="{lex:LocText CurrentWordCode}" controls:CustomColumnInfo.Name="CurrentWordCode">
<GridViewColumn.CellTemplate>
<DataTemplate>
<ComboBox x:Name="ToolsComboBox" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="0,0,0,0"
SelectedItem="{Binding SelectedCurrentWord}" ItemsSource="{Binding AvailbleWords}" DisplayMemberPath="Item1" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="{lex:LocText CurrentWordName}" DisplayMemberBinding="{Binding SelectedCurrentWord.Item2}"
controls:CustomColumnInfo.Name="CurrentWordName"/>
然后SelectedCurrentWord是
private Tuple<string,string, string> _SelectedCurrentWord;
public Tuple<string,string, string> SelectedCurrentWord
{
get { return _SelectedCurrentWord; }
set { _SelectedCurrentWord = value;
OnPropertyChanged("SelectedCurrentWord");
}
}
我正在创建上述对象:
SelectedCurrentWord = new Tuple<string, string, string>(CurrentWordCode, CurrentWordName, CurrentWordCode + " - " + CurrentWordName)
ItemSource是这样的:
AvailbleWords = new List<Tuple<string, string, string>>();
现在:
现在图像的第一列包含Code(Tuple中的第一个字符串),第二列包含Name(Tuple中的第二个字符串)。我的问题是,从组合框中选择项目的用户不知道选择哪个项目,因为只看到代码,而不是项目的名称。
用途
我的目的是在CurrentWordCode列中用户看到代码,在CurrentWordName列中,用户看到此项的名称。这是暂时完成的。但是当用户点击combox然后我想向他展示如下格式的项目:&#34; Code&#34; +&#34; - &#34; +&#34;名称&#34;,不像现在只显示代码。
因此我在Tuple结构中创建了第三个项目,并且有#34; Code&#34; +&#34; - &#34; +&#34;名称&#34;但问题是如果选择组合框中的项目并打开组合框,那么在组合框中显示的选定项目也采用这种格式,但必须只有一个&#34;代码&#34;。
很抱歉复杂的描述,如果不清楚我在寻找什么,那么请问问题,我会尝试更好地描述它。感谢advace的任何帮助。关心并度过美好的一天。
答案 0 :(得分:1)
首先,你可以松开你元组中的第三个项目,这纯粹是为了显示目的而不应该存在,因为我们已经拥有了其他两个项目中我们需要的所有信息。
其次,您需要使用controltemplate告诉您的组合框如何显示它的内容。实际上你需要两个。一个用于所选项目,另一个用于下拉列表。然后,您可以使用datatemplate确保组合框处理两种情况。
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<ControlTemplate x:Key="SimpleTemplate">
<StackPanel>
<TextBlock Text="{Binding Item1}" />
</StackPanel>
</ControlTemplate>
<ControlTemplate x:Key="ExtendedTemplate">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Item1}" />
<TextBlock Text="-" />
<TextBlock Text="{Binding Item2}" />
</StackPanel>
</ControlTemplate>
<DataTemplate x:Key="TupleTemplate">
<Control x:Name="theControl" Focusable="False" Template="{StaticResource ExtendedTemplate}" />
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ComboBoxItem}}, Path=IsSelected}" Value="{x:Null}">
<Setter TargetName="theControl" Property="Template" Value="{StaticResource SimpleTemplate}" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</Window.Resources>
<StackPanel>
<ComboBox x:Name="ToolsComboBox" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="0,0,0,0" Width="200"
SelectedItem="{Binding SelectedCurrentWord}" ItemsSource="{Binding AvailbleWords}" ItemTemplate="{StaticResource TupleTemplate}" />
</StackPanel>
答案 1 :(得分:0)
看起来您需要设置ComboBox的以下属性:
<ComboBox x:Name="ToolsComboBox" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="0,0,0,0" SelectedItem="{Binding SelectedCurrentWord}" ItemsSource="{Binding AvailbleWords}" SelectedValuePath="Item1" SelectionBoxItemTemplate="{Path_to your template}" />