Связывание с IValueConverter в Silverlight - PullRequest
1 голос
/ 21 марта 2012

Я работаю над IValueConverter в Silverlight.Этот конвертер значений должен перебрать коллекцию элементов MyOption и получить совпадение.Значения MyOption на самом деле поступают из базы данных.Я использую этот конвертер в DataGrid.Из-за этого я не хочу попадать в базу данных каждый раз.Скорее, я хочу попасть в базу данных один раз и передать параметры конвертеру.Чтобы добиться этого, я подумал, что мне нужно открыть свойство и привязать к нему свою коллекцию элементов MyOption, как показано здесь:

<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 в преобразователь типов, чтобы не выполнять многократные поездки на сервер.

1 Ответ

0 голосов
/ 30 января 2013

Здесь вводятся параметры конвертера. Вам необходимо отправить ваши параметры вместе с вашим 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;
  }
}

Вы захотите проверить, что параметр не нулевой, и что он содержит что-то после того, как вы передадите его, но вы получите точку ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...