这是我能给出的最纯粹的例子 我有一个简单的ComboBox:
<ComboBox ItemsSource="{Binding ItemsSource}" SelectedItem="{Binding SelectedItem, Mode=OneWay}"/>
这是CodeBehind:
public partial class MainPage : UserControl, INotifyPropertyChanged
{
private List<string> m_ItemsSource;
public List<string> ItemsSource
{
get
{
return m_ItemsSource;
}
set
{
m_ItemsSource = value;
PropertyChanged(this, new PropertyChangedEventArgs("ItemsSource"));
}
}
private string m_SelectedItem;
public string SelectedItem
{
get
{
return m_SelectedItem;
}
set
{
m_SelectedItem = value;
PropertyChanged(this, new PropertyChangedEventArgs("SelectedItem"));
}
}
public MainPage()
{
InitializeComponent();
DataContext = this;
ItemsSource = new List<string>()
{
"Value A",
"Value B"
};
}
private void button1_Click(object sender, RoutedEventArgs e)
{
SelectedItem = "Value A";
}
private void button2_Click(object sender, RoutedEventArgs e)
{
SelectedItem = "Value B";
}
public event PropertyChangedEventHandler PropertyChanged;
}
出于某种原因,ComboBox中的SelectedItem在第一次按键单击时正确更新,但随后停止响应。
但奇怪的是,当改为 Mode = TwoWay 时,它会起作用
我特别需要一个OneWay绑定,不希望ComboBox更改属性。
这是一个已知的错误还是一些奇怪的设计决定?
答案 0 :(得分:0)
这是一个已知的错误,似乎它仍然在Silverlight 4中发生。始终使用TwoWay与SelectedItem绑定。