Как сделать привязку TwoWay к выбранному индексу радиокнопки? - PullRequest
0 голосов
/ 08 декабря 2011

У меня есть список объектов (состоящий из идентификатора типа int и строки), каждый из которых представляет опцию и соответствует переключателю.У меня есть int selectedChoice, и он обозначает идентификатор выбранного радиобокса, который представляет собой вариант.Я хочу, чтобы int SelectedChoice и фактический выбранный радиоблок были связаны друг с другом (двусторонняя привязка).

Радиобокс добавляется в список с помощью ItemTemplate и ItemsSource.

Как это можно сделатьбыть сделано?Я пробовал так много методов, и никто не работает.


Я пробовал

  • Converter (но он не поддерживает привязку в ConverterParameter)
  • Добавьте целый класс, который может идентифицировать выбранный радиоблок, а также содержит int SelectedChoice.Но этот метод завершается неудачно при обратном преобразовании, так как я не получаю никакой необходимой информации таким образом.
  • Используйте DependencyObject, который не срабатывает, когда я пытаюсь связать что-то с ним, поскольку его нет DataContext in Binding.Converter и обходные пути, которые я нашел в Интернете, работают только для WPF.
  • IMultiConverter, которого вообще нет в SilverLight

Ответы [ 2 ]

1 голос
/ 09 декабря 2011

Вы могли бы оформить список, чтобы у радиокнопок были элементы списка. Источник списка будет привязан к списку ваших предметов. Затем используйте свойство selecteditem или selectedvalue как обычно.

Как реализовать элемент управления радиокнопки XAML с источником ObservableCollection?

Привязка выбранныхИмейбокса Список кнопок радио в выпадающем списке

1 голос
/ 08 декабря 2011
public class Choice : BaseModel
{
    private int id;
    public int Id
    {
        get { return id; }
        set 
        {
            id = value;
            NotifyPropertyChanged("Id");
        }
    }

    private bool isSelected;
    public bool IsSelected
    {
        get { return isSelected; }
        set
        {
            isSelected = value;

            if (isSelected)
            {
                App.viewModel.SelectItem(Id);
            }
            NotifyPropertyChanged("IsSelected");
        }
    }

    private string text;
    public string Text
    {
        get { return text; }
        set
        {
            text = value;
            NotifyPropertyChanged("Text");
        }
    }
}

.

public class ViewModel : BaseViewModel
{
    public ObservableCollection<Choice> Choices {get; set;}

    public int SelectedChoice { get; private set; }

    public ViewModel()
    {
        Choices = new ObservableCollection<Choice>();
        Choices.Add(new Choice() { Id = 0, Text = "1" });
        Choices.Add(new Choice() { Id = 1, Text = "2" });
        Choices.Add(new Choice() { Id = 2, Text = "3" });
    }

    public void SelectItem(int Id)
    {
        SelectedChoice = Id;
        MessageBox.Show(SelectedChoice.ToString());
        foreach (var choice in Choices)
        {
            if (choice.Id != Id)
            {
                choice.IsSelected = false;
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...