2012-03-21 5 views
1

SilverlightでIValueConverterを使用しています。この値コンバータは、MyOption要素のコレクションをループして一致する必要があります。 MyOption値は実際にはデータベースから来ます。私はこのコンバータをDataGrid内で使用しています。そのため、私は毎回データベースにヒットしたくありません。むしろ、私は一度データベースにヒットし、コンバータにオプションを渡したいと思います。ここに示したようにこれを実現するために、私はプロパティを公開し、それにMyOption要素の私のコレクションをバインドするだろうと思った:ここに示されているようMyTypeConverterを定義SilverlightでIValueConverterにバインドする

<converters:MyTypeConverter x:Key="myTypeConverter" UpdateTypes="{Binding Path=MyOptions}" /> 

... 

<TextBlock Text="{Binding Path=OptionID, Converter={StaticResource 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}}" /> 

のTypeConverter:

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

あなたはパラメータがないことを確認したいと思いますあなたがそれを渡した後に何かが含まれていますが、あなたはポイントを得る...

+0

私はConverterParameterにリテラル以外の何も渡すことができないので、これはうまくいかないと思います。これを見てください - http://stackoverflow.com/questions/1345170/pass-value-of-a-field-to-silverlight-converterparameter – Xin

関連する問題