我有一个问题,即当我更新组合框项上的文本时,它不会立即反映在UI上。必须单击Combobox来显示项目(其中包含正确的文本)。知道为什么吗?注意,这段代码在WPF
中工作得很好。定义要显示
的字符串的属性public string NormallyOpenString
{
get
{
if (this.IsInput)
{
return "High";
}
else if (this.IsRelay)
{
return "Open";
}
else
{
return "Open (High)";
}
}
}
它被绑定到像这样的组合框
<ComboBox SelectedIndex="{Binding Normally, Mode=TwoWay}" >
<ComboBoxItem Content="{Binding NormallyOpenString}" />
<ComboBoxItem Content="{Binding NormallyClosedString}" />
</ComboBox>
当另一个组合框改变时,我想更新文本,因为它改变了IsInput
/IsRelay
是什么。我通过NotifyPropertyChanged
这样做
this.NotifyPropertyChanged("NormallyOpenString");
this.NotifyPropertyChanged("NormallyClosedOpenString");
this.NotifyPropertyChanged("Normally");
我从来没有这样做过,所以我不能保证。这是我如何做属性更改通知:
public class MyViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void RaisePropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = this.PropertyChanged;
if (handler != null)
{
var e = new PropertyChangedEventArgs(propertyName);
handler(this, e);
}
}
private string normallyOpenString = "I'm an open string!";
public string NormallyOpenString
{
get { return normallyOpenString; }
set
{
normallyOpenString = value;
RaisePropertyChanged("NormallyOpenString");
}
}
}
现在,无论何时有人调用你的setter,任何绑定到你的属性的东西都会被更新。因此,如果它是从一个绑定中设置的,那么所有绑定到它的其他绑定都将被更新。
我认为你应该使用SelectedItem属性。