2012-03-21 83 views
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傳遞給類型轉換器,以便我不會執行多次往返服務器。

回答

0

這是轉換器的參數來在您需要發送你的選擇與你一起OptionID:

<converters:MyTypeConverter x:Key="myTypeConverter" /> 
... 
<TextBlock Text="{Binding Path=OptionID, 
        Converter={StaticResource myTypeConverter}, 
        ConverterParameter={Binding Path=MyOptions}}" /> 

類型轉換器:

public class MyTypeConverter : UIElement, IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
    var Options = parameter As ObservableCollection<MyOption> 
    string result = SomeObject.Convert(value, Options); 
    return result; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
    return value; 
    } 
} 

你要檢查參數不null,這是你通過它後,包含的東西,但你明白了...

+0

我認爲這將無法正常工作,因爲你不能傳遞任何東西,但文字到ConverterParameter。看到這個 - http://stackoverflow.com/questions/1345170/pass-value-of-a-field-to-silverlight-converterparameter – Xin 2013-06-24 14:41:37