我有ComboBox
绑定到EnumerableRowCollection<T>
:
ComboFamilyStatus.ItemsSource = EnumerableRowCollection<TaxDataSet.SourcesOfValuesRow> coll;
我的xaml看起来像这样:
<ComboBox Name="ComboFamilyStatus" DisplayMemberPath="Description"
Text="{Binding FamilyStatus, Converter={StaticResource FamilyStatusStringConverter}}">
我正在使用DisplayMemberPath
来显示该行的说明。 SourcesOfValuesRow有一个值和一个描述,在组合中我想看到描述文本。 Text被绑定到将FamilyStatus保存为int值的数据库,这就是我添加转换器的原因。
我的问题是转换器是否可以使用组合框中的itemsource从int值转换为字符串?我没有看到转换器知道有关组合的任何信息。与此同时,我编写了转换器,再次从数据库中取出EnumerableRowCollection<TaxDataSet.SourcesOfValuesRow>
并找到匹配的描述 - 这不是最简单的方法!
有什么建议??
答案 0 :(得分:3)
在这种情况下,您最好使用DataTemplate
,而不是Converter
。
您已有数据类。只需使用DataTemplate
插入绑定到int值的Textblock
,然后在那里应用转换器。
<ComboBox>
<ComboBox.ItemTemplate>
<DataTemplate DataType="{x:Type local:TaxDataSet.SourcesOfValuesRow}">
<TextBlock Text="{Binding FamilyStatus, Converter={StaticResource FamilyStatusStringConverter}}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
<ComboBox>
将SourcesOfValuesRow FamilyStatusProperty更改为枚举。从int派生可以让你直接投射它。
enum FamilyStatusValues : int
{
[Description("Married")]
Married,
[Description("Divorced")]
Divorced,
[Description("Living Together")]
LivingTogether
}
然后在您的转换器中使用此代码
ConvertTo(object value, ...)
{
FieldInfo field = value.GetType().GetField(value.ToString());
object[] attribs = field.GetCustomAttributes(typeof(DescriptionAttribute), true));
if(attribs.Length > 0)
{
return ((DescriptionAttribute)attribs[0]).Description;
}
return string.Empty;
}
答案 1 :(得分:0)
无需使用任何转换器。它对我有用:
<ComboBox Name="FamilyStatus" Grid.Row="7" Grid.Column="1" ItemsSource="{Binding Source={StaticResource comboProvider}}"
SelectedValuePath="Value" DisplayMemberPath="Description" SelectedValue="{Binding FamilyStatus}">
其中DisplayMemberPath
是TaxDataSet.SourcesOfValuesRow
的字符串,SelectedValuePath
是int值。 SelectedValue
是联系人表格中的值(而不是在组合Text="{Binding FamilyStatus, Converter={StaticResource FamilyStatusStringConverter}}
中撰写)。