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をタイプコンバータに渡す方法がわからないので、サーバーへの複数のラウンドトリップはしません。
私はConverterParameterにリテラル以外の何も渡すことができないので、これはうまくいかないと思います。これを見てください - http://stackoverflow.com/questions/1345170/pass-value-of-a-field-to-silverlight-converterparameter – Xin