我正在尝试将标签文字与单选按钮值相关联,例如如果检查了无线电,则标签文本为“x”。如果没有,那就是“y”。 在我的XML中:
<RadioButton x:Name="radio1" Content="Option1" GroupName="Group1" IsChecked="{Binding BoolValue, Converter={StaticResource BooleanConverter}, ConverterParameter='true', Mode=TwoWay}" />
<RadioButton Content="Option2" GroupName="Group2" IsChecked="{Binding BoolValue, Converter={StaticResource BooleanConverter}, ConverterParameter='false', Mode=TwoWay}"/>
...
...
<Label Content="{Binding LabelText, UpdateSourceTrigger=PropertyChanged}" Width="70"/>
代码: (_shape绑定到单选按钮IsChecked;)
private bool _boolValue;
public bool BoolValue
{
get { return _boolValue; }
set
{
_boolValue= value;
PackLengthLabel = (_boolValue == true)? "x" : "y";
OnPropertyChanged("BoolValue");
}
}
标签文字属性:
private string _labelText;
public string LabelText
{
get { return _labelText; }
set
{
_labelText = value;
OnPropertyChanged("LabelText");
}
}
问题是更改不会影响标签文本 - 无论选中哪个复选框,它都会始终相同。布尔值和文本值正在变化(在setter中检查)。我还检查过标签是否试图从getter获取_labelText,但事实并非如此。我也尝试了不同的绑定模式,但文本都是一样的。 它影响其他控件的唯一方法是直接绑定到其他属性,例如:
IsEnabled="{Binding IsChecked, ElementName=radio1}"
EDIT1:
我可以通过两种方式开展工作:
在后面的View代码中设置标签内容值,参考元素属性
但我仍然很好奇,为什么简单的标签文本值的getter和setter没有完成这项工作。
答案 0 :(得分:0)
最后我明白了。我在View和ViewModel中有属性setter和getter。问题是View继承自INotifyPropertyChanged,但ViewModel在ViewModel中没有那么多我可以使用OnPropertyChanged,而不会出现任何错误。