2011-12-08 27 views
0

我有一個對象列表(由一個int類型的ID和一個String組成),每個表示一個選項並對應一個單選框。我有一個int selectedChoice,它代表所選radiobox的ID,代表一個選項。我希望int SelectedChoice和實際選定的無線電框相互綁定(雙向綁定)。如何才能將TwoWay綁定到單選按鈕的選定索引?

使用ItemTemplate和ItemsSource將放射性框添加到列表框中。

這怎麼辦?我嘗試了很多方法,沒有人工作。


我已經試過

  • 轉換器(但它不支持綁定在ConverterParameter
  • 添加全班可以識別所選擇的單選框,並攜帶int SelectedChoice。但是這個方法在轉換時失敗了,因爲我沒有那樣獲得任何必要的信息。
  • 使用DependencyObject,當我嘗試將其綁定到事件時失敗,因爲Binding.Converter中沒有DataContext,我在Internet上找到的解決方法僅適用於WPF。
  • IMultiConverter不都在Silverlight

回答

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