2013-04-04 54 views
1

我有一個綁定到一個EnumerableRowCollection<T> WPF ComboBox組合框的約束該行。 SourcesOfValuesRow有一個值和一個描述,在組合中我想看到描述文本。 Text被綁定到將FamilyStatus作爲int值保存的數據庫,這就是我添加轉換器的原因。使用轉換器

我的問題是如果轉換器可以使用來自combobox的itemsource從int值轉換爲字符串?我沒有看到轉換器知道組合的任何內容。與此同時,我寫了轉換器,再次從數據庫中獲取EnumerableRowCollection<TaxDataSet.SourcesOfValuesRow>,並找到匹配的描述 - 這不是最簡單的方法! 有什麼建議?

+0

您使用「EnumerableRowCollection 」而不是「字典」的任何特定原因?我知道如果你使用'Dictionary ',你可以使用'SelectedValuePath =「Key綁定」DisplayMemberPath =「Value」' – 2013-04-04 19:32:26

回答

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

我仍然不知道在轉換器中寫什麼。我能否以另一種方式獲取描述的int值,而不僅僅是從數據庫中重新獲取整個列表?在已經有組合框將項目源設置爲數據庫列表後,必須有最簡單的方法。我可以在轉換器中使用組合框的itemSource嗎? – user2155957 2013-04-06 20:09:34

+0

從int值轉換爲描述? 老實說,在這一點上,你應該考慮[寫一個枚舉並給它顯示文本](http://stackoverflow.com/questions/1331487/how-to-have-userfriendly-names-for-enumerations)。如果你設置你的枚舉是從int派生的,你可以直接從db值轉換爲enum,綁定enum來顯示,而你的轉換器只是返回顯示文本屬性。 – 2013-04-09 14:46:17

0

無需使用任何轉換器。它的工作我使用這個爲:

<ComboBox Name="FamilyStatus" Grid.Row="7" Grid.Column="1" ItemsSource="{Binding Source={StaticResource comboProvider}}" 
      SelectedValuePath="Value" DisplayMemberPath="Description" SelectedValue="{Binding FamilyStatus}"> 

哪裏DisplayMemberPathTaxDataSet.SourcesOfValuesRowSelectedValuePath的字符串是int值。 SelectedValue是來自聯繫人表的值(而不是寫入組合Text="{Binding FamilyStatus, Converter={StaticResource FamilyStatusStringConverter}})。