2010-10-29 88 views
0

我想弄清楚它是否可能通過後面的代碼更新IValueConverter。通過代碼更新IValueConverter代碼

我的情況是我有兩個組合框。一旦更新第一個,我將第二個的ItemsSource屬性更改爲各種枚舉之一。我從CodeProject中抓取了一個EnumToFriendlyNameConverter,但我不知道如何設置它。

如果我在ItemsSource中設置了轉換器(見下文),那麼當我下一次設置項目源時它會被忽略。

ItemsSource="{Binding Converter={StaticResource enumItemsConverter}}"

我發現,可以通過使用一個ItemTemplate但後來我不得不手動放置在一個標籤,然後有不同的風格,我的其他組合框。正確獲取樣式似乎有很多工作...

回答

2

當您更改ItemsSource時,您只需再次應用轉換器或修改ItemsSource而不是替換它。

例如創建一個新的綁定:

private void ChangeItemsSouce(IEnumerable newItems) 
{ 
    Binding binding = new Binding(); 
    binding.Source = newItems; 
    binding.Converter = new EnumToFriendlyNameConverter(); 
    comboBox.SetBinding(ComboBox.ItemsSourceProperty, binding); 
} 

或修改現有綁定:

private void ChangeItemsSouce(IEnumerable newItems) 
{ 
    var binding = comboBox.GetBindingExpression(ComboBox.ItemsSourceProperty); 
    binding.ParentBinding.Source = newItems; 
} 
+0

我不認爲我的代碼到了測試,但它聽起來很有道理,所以我會假設你'對了。謝謝 :) – Ian 2011-05-05 08:06:53