我在 wpf 中有一个 ComboBox,它在视图和视图模型之间双向绑定。在win7中的.net 4下运行一切都按预期工作,但在windows 8下运行我的应用程序,组合框似乎无法从视图模型中获得正确的选定项目。
进入视图时,组合框会从视图模型中询问所选项目
。所选项目被返回,我的覆盖“Equals”的方法返回 true。
然后视图中的组合框要么不注册,要么注册然后忽略它,接下来发生的事情是视图将视图模型中的“选定项”设置为“NULL”。
是否有另一种方法可以满足要求,或者它只是在.net 4.5 下运行.net 4 应用程序中的一个错误,我将不得不忍受?
这是来源。注意我绑定到项目类而不是直接绑定到枚举,因此我可以访问 [Description] 标记以获得更好的组合框中的项目名称。
看法
<Controls:KNComboBox Style="{DynamicResource FlowMenuComboBox}" SelectedItem="{Binding ItemsOrder}" ItemsSource="{Binding ItemsOrderValues}" Margin="10,0,0,10"
DisplayMemberPath="Description" SelectedValuePath="{Binding Path=EnumObject}" DisplayString="Sort By:"/>
查看模型
private ItemsOrderByItem _itemsOrder;
public ItemsOrderByItem ItemsOrder
{
get
{
return _itemsOrder;
}
set
{
_itemsOrder = value;
RaisePropertyChanged("ItemsOrder");
//Methods Called Here Not Important To Question
}
}
public List<ItemsOrderByItem> ItemsOrderValues
{
get
{
List<ItemsOrderByItem> enumItems = new List<ItemsOrderByItem>();
foreach (ItemsOrderBy enumValue in Enum.GetValues(typeof(ItemsOrderBy)))
{
enumItems.Add(new ItemsOrderByItem(enumValue));
}
return enumItems;
}
}
枚举
public enum ItemsOrderBy
{
[Description("Name")]
Name,
[Description("Date Added")]
DateAdded
}
项目类
public class ItemsOrderByItem
{
public ItemsOrderByItem(ItemsOrderBy enumValue)
{
EnumObject = enumValue;
}
public ItemsOrderBy EnumObject;
public string Description
{
get
{
return EnumExtension.GetEnumDescription<ItemsOrderBy>(EnumObject);
}
}
public override string ToString()
{
return Description;
}
public override bool Equals(object obj)
{
if (obj is ItemsOrderByItem)
{
return ((ItemsOrderByItem)obj).EnumObject == EnumObject;
}
else
{
return false;
}
}
}