Сохранение выбора радио после смены источника элемента - PullRequest
0 голосов
/ 15 апреля 2010

Установка:

У меня есть поле со списком, его источник элементов привязан к ObservableCollection пользовательского класса, одно свойство - список .

У меня есть itemcontrol, который привязан к данным выбранного элемента списка. Свойство List .

Таблица данных itemscontrol создает список радиокнопок, каждая из которых представляет отдельные значения перечисления в списке.

Желание:

Когда я изменяю значение в поле со списком, источник элементов управления обновляется. Я хочу, чтобы это происходило, если переключатель в новом источнике управления элементами такой же, как выбранная кнопка в предыдущем списке (до ее обновления), это нужно проверить.

Текущая идея:

Назначьте событие Checked переключателям, которые поддерживают свойство myenum в классе окна, с которым можно сравнивать. Сделайте свойство IsChecked радиобокса привязанным к конвертеру и сравните его со свойством myenum. Чтобы добиться этого, я сделал класс окна расширенным от IValueConverter, таким образом, функция конвертера имеет доступ к свойству myenum.

Проблема:

Я не знаю, как заставить привязку IsChecked использовать окно в качестве конвертера. Я попытался использовать относительный источник в части конвертера привязки, но это не работает IsChecked="{Binding Converter={RelativeSource={RelativeSource Self}}}"

Предпочитаемые ответы:

Помощь в исправлении синтаксиса привязки, если это возможно.

Идеи более подходящего способа достижения того, что я хотел бы.

1 Ответ

0 голосов
/ 15 апреля 2010

Я также не знаю, как использовать окно в качестве преобразователя значений в xaml. Вместо этого создайте автономный класс преобразователя значений с открытым свойством для типа enum. Затем в конструкторе окна получите ссылку на экземпляр преобразователя значений и сохраните его в приватном элементе.

XAML:

<local:MyValueConverter x:Key="ConvertSomething" />

Код:

private MyValueConverter _myValueConverter;

public Window1()
{
  InitializeComponent();

  _myValueConverter = FindResource("ConvertSomething") as MyValueConverter;
}

private void RadioButton_Checked(object sender, RoutedEventArgs e)
{
    // You can access _myValueConverter here and set its public enum property.    
}
...