Winforms INotifyPropertyChanged for radio button backColor



是否有方法更改已绑定到ViewModel属性的RadioButtonBackColor

基本上,我使用的是带有INotifyPropertyChangedViewModel,我想根据其绑定的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);
}

最新更新