我有一个绑定到组合框的项目列表。当用户选择一个项目时,我想取消选择并选择其他项目。这必须发生在SelectedItem绑定的属性的setter中。我使用Silverlight 3Silverlight组合框强制重新选择SelectedItem
在组合框的每个项目我的数据模型:
public class DataItem
{
public int Id { get; set; }
public string Name { get; set; }
}
对象,它是设置到DataContext:XAML的
public class DataContainer : INotifyPropertyChanged
{
public DataContainer()
{
itemList = new List<DataItem>();
itemList.Add(new DataItem() { Id = 1, Name = "First" });
itemList.Add(new DataItem() { Id = 2, Name = "Second" });
itemList.Add(new DataItem() { Id = 3, Name = "Third" });
}
public event PropertyChangedEventHandler PropertyChanged;
private DataItem selectedItem;
public DataItem SelectedItem
{
get { return selectedItem; }
set
{
if (value != null && value.Id == 2)
value = itemList[0];
selectedItem = value;
NotifyPropertyChanged("SelectedItem");
}
}
private List<DataItem> itemList;
public List<DataItem> ItemList
{
get { return itemList; }
set { itemList = value; NotifyPropertyChanged("DataList"); }
}
protected void NotifyPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
相关位:
<StackPanel>
<StackPanel Orientation="Horizontal">
<ComboBox x:Name="comboBox" DisplayMemberPath="Name" Width="100" ItemsSource="{Binding ItemList}" SelectedItem="{Binding Path=SelectedItem, Mode=TwoWay}"/>
<Button Content="Set to First" Width="100" Click="Button_Click"/>
</StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock Text="Selected item: "/>
<TextBlock Text="{Binding SelectedItem.Id}"/>
<TextBlock Text=" - "/>
<TextBlock Text="{Binding SelectedItem.Name}"/>
</StackPanel>
</StackPanel>
它看起来像我的代码,当用户选择第二个项目正在工作时选择第一个项目。被选择的项目实际上被设置为“第一”,而组合框仍然显示“第二”,就好像它被选中一样。
有什么办法强制ComboBox重绘或重新考虑它应该在视觉上标记为选中的内容吗?
我做到这一点从上述Button_Click方法和它的工作原理:
private void Button_Click(object sender, RoutedEventArgs e)
{
var c = DataContext as DataContainer;
if (c != null)
{
c.SelectedItem = null;
c.SelectedItem = c.ItemList[0];
}
}
但设置为null,然后,如果我从模子中不喜欢它,我需要我想要的值不工作。
我真的希望避免这种做法。如果我无法弄清楚如何使ComboBox自行修复,那么我想我必须这样做。 – 2011-05-04 16:20:14