1

我有一个ComboBox绑定到一个EnumerableRowCollection<T>

ComboFamilyStatus.ItemsSource = EnumerableRowCollection<TaxDataSet.SourcesOfValuesRow> coll;

我的 xaml 看起来像这样:

<ComboBox Name="ComboFamilyStatus" DisplayMemberPath="Description" 
          Text="{Binding FamilyStatus, Converter={StaticResource FamilyStatusStringConverter}}">

我正在使用DisplayMemberPath来显示行的描述。SourcesOfValuesRow 有一个值和一个描述,在组合中我想查看描述文本。文本绑定到 FamilyStatus 保存为 int 值的数据库,这就是我添加转换器的原因。

我的问题是转换器是否可以使用组合框中的 itemsource 从 int 值转换为字符串?我没有看到转换器对组合一无所知。与此同时,我编写了转换器以再次EnumerableRowCollection<TaxDataSet.SourcesOfValuesRow>从数据库中获取并找到匹配的描述 - 这不是最简单的方法!有什么建议么??

4

2 回答 2

3

在这种情况下,您最好使用 a DataTemplate,而不是 a Converter

您已经有一个数据类。只需使用将绑定DataTemplate插入到 int 值的 a ,然后在此处应用您的转换器。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;
}
于 2013-04-04T19:18:17.647 回答
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是联系人表中的值(而不是写在 combo 中Text="{Binding FamilyStatus, Converter={StaticResource FamilyStatusStringConverter}})。

于 2013-04-07T19:21:26.497 回答