Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用转换器的WPF绑定组合框_Wpf_Binding_Combobox_Converter - Fatal编程技术网

使用转换器的WPF绑定组合框

使用转换器的WPF绑定组合框,wpf,binding,combobox,converter,Wpf,Binding,Combobox,Converter,我有一个绑定到EnumerablerRowCollection的组合框: ComboFamilyStatus.ItemsSource=EnumerablerRowCollection coll; 我的xaml如下所示: <ComboBox Name="ComboFamilyStatus" DisplayMemberPath="Description" Text="{Binding FamilyStatus, Converter={StaticResource Fam

我有一个绑定到
EnumerablerRowCollection的
组合框

ComboFamilyStatus.ItemsSource=EnumerablerRowCollection coll;
我的xaml如下所示:

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

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

我的问题是,转换器是否可以使用组合框中的itemsource将int值转换为字符串?我看不出转换器对组合有任何了解。与此同时,我编写了转换器,再次从数据库中获取
EnumerablerRowCollection
,并在那里找到匹配的描述-这不是最简单的方法!
有什么建议吗?

在这种情况下,最好使用
数据模板,而不是
转换器

您已经有了一个数据类。只需使用
DataTemplate
插入绑定到int值的
Textblock
,然后在那里应用转换器

<ComboBox>
   <ComboBox.ItemTemplate>
      <DataTemplate DataType="{x:Type local:TaxDataSet.SourcesOfValuesRow}">
         <TextBlock Text="{Binding FamilyStatus, Converter={StaticResource FamilyStatusStringConverter}}"/>
      </DataTemplate>
   </ComboBox.ItemTemplate>
<ComboBox>
然后在转换器中使用此代码

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;
}

不需要使用任何转换器。这对我来说很有用:

<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}
).

如果您使用的是
EnumerablerRowCollection
,而不是
Dictionary
?我知道如果您使用
Dictionary
,您可以使用
SelectedValuePath=“Key”DisplayMemberPath=“Value”绑定“
我仍然不知道在转换器中写什么。除了从数据库中再次获取整个列表外,我可以用另一种方式获取描述的int值吗?必须有一个最简单的方法来实现这一点,因为我已经有了一个combobox,该combobox将项目源设置为DB中的列表。我可以在转换器中使用组合框的itemSource吗?从int值转换为description?老实说,在这一点上你应该考虑一下。如果将枚举设置为从int派生,则可以直接从db值转换为枚举,将枚举绑定到display,转换器只返回display text属性。
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;
}
<ComboBox Name="FamilyStatus" Grid.Row="7" Grid.Column="1" ItemsSource="{Binding Source={StaticResource comboProvider}}"
            SelectedValuePath="Value" DisplayMemberPath="Description" SelectedValue="{Binding FamilyStatus}">