1
我正在使用Silverlight中的IValueConverter。該值轉換器需要遍歷MyOption元素的集合並獲得匹配。 MyOption值實際上來自數據庫。我在DataGrid中使用這個轉換器。正因爲如此,我不想每次都碰到數據庫。相反,我想打一次數據庫,並將選項傳遞給轉換器。要做到這一點,我想我會暴露屬性,並結合我MyOption元素,它集合如下所示:在Silverlight中綁定到IValueConverter
<converters:MyTypeConverter x:Key="myTypeConverter" UpdateTypes="{Binding Path=MyOptions}" />
...
<TextBlock Text="{Binding Path=OptionID, Converter={StaticResource myTypeConverter}}" />
我則如下所示定義MyTypeConverter:
public class MyTypeConverter : UIElement, IValueConverter
{
public ObservableCollection<MyOption> Options
{
get { return (ObservableCollection<MyOption>)GetValue(OptionsProperty); }
set { SetValue(OptionsProperty, value); }
}
public static readonly DependencyProperty OptionsProperty =
DependencyProperty.Register("Options",
typeof(string), typeof(MyTypeConverter), null);
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
string result = SomeObject.Convert(value, Options);
return result;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return value;
}
}
不幸的是,我不能似乎得到這個工作。這幾乎就像我無法綁定到轉換器。我得到一個編譯時錯誤,說:「類型System.Windows.UIElement沒有定義的構造函數。」同時,我不知道如何將MyOptions傳遞給類型轉換器,以便我不會執行多次往返服務器。
我認爲這將無法正常工作,因爲你不能傳遞任何東西,但文字到ConverterParameter。看到這個 - http://stackoverflow.com/questions/1345170/pass-value-of-a-field-to-silverlight-converterparameter – Xin 2013-06-24 14:41:37