是否有方法更改已绑定到ViewModel
属性的RadioButton
的BackColor
?
基本上,我使用的是带有INotifyPropertyChanged
的ViewModel
,我想根据其绑定的Bool属性更改单选按钮的BackColor
。因此,如果true
,则将背景色设置为Green
,否则为default
。
这是我迄今为止的尝试,但显然没有奏效。我确信我的双重装订不正确?
public class ViewModel : INotifyPropertyChanged
{
private bool _prop1;
public bool Prop1 {
get
{
return _prop1;
}
set
{
if (value == _prop1) return;
_prop1= value;
OnPropertyChanged();
OnPropertyChanged(nameof(BackColor));
}
}
private bool _prop2;
public bool Prop2{
get
{
return _prop2;
}
set
{
if (value == _prop2) return;
_prop2= value;
OnPropertyChanged();
OnPropertyChanged(nameof(BackColor));
}
}
public Color BackColor => Color.Green;
public event PropertyChangedEventHandler PropertyChanged;
[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
表单
public partial class Form1
{
private ViewModel _viewModel;
public Form1()
{
InitializeComponent();
SetupBindings();
}
public void SetupBindings()
{
radioButton1.DataBindings.Add("Checked", _viewModel, nameof(_viewModel.Prop1), true);
radioButton1.DataBindings.Add("BackColor", _viewModel, nameof(_viewModel.BackColor ), true, DataSourceUpdateMode.OnPropertyChanged);
radioButton2.DataBindings.Add("Checked", _viewModel, nameof(_viewModel.Prop2), true);
radioButton2.DataBindings.Add("BackColor", _viewModel, nameof(_viewModel.BackColor ), true, DataSourceUpdateMode.OnPropertyChanged);
}
}
好吧,我想我已经解决了我的问题:(
因此,在我的ViewModel 中为每个单选按钮创建了两个单独的BackColor
属性
private bool _prop1;
public bool Prop1 {
get
{
return _prop1;
}
set
{
if (value == _prop1) return;
_prop1= value;
OnPropertyChanged();
OnPropertyChanged(nameof(Radio1ButtonBackColor));
}
}
private bool _prop2;
public bool Prop2{
get
{
return _prop2;
}
set
{
if (value == _prop2) return;
_prop2= value;
OnPropertyChanged();
OnPropertyChanged(nameof(Radio2ButtonBackColor));
}
}
public Color Radio1ButtonBackColor => Prop1? Color.Green : default;
public Color Radio2ButtonBackColor => Prop2? Color.Green : default;
并将它们绑定到单选按钮backColor
属性
public void SetupBindings()
{
radioButton1.DataBindings.Add("Checked", _viewModel, nameof(_viewModel.Prop1), true);
radioButton1.DataBindings.Add("BackColor", _viewModel, nameof(_viewModel.RadioButton1BackColor Radio1ButtonBackColor), true, DataSourceUpdateMode.OnPropertyChanged);
radioButton2.DataBindings.Add("Checked", _viewModel, nameof(_viewModel.Prop2), true);
radioButton2.DataBindings.Add("BackColor", _viewModel, nameof(_viewModel.RadioButton2BackColor), true, DataSourceUpdateMode.OnPropertyChanged);
}