为什么这样UWP组合框可以初始化后的空白,但可供选择正常工作? [英] Why this UWP ComboBox can be blank after initialization but works fine for selection?
问题描述
我有这样一个组合框
<ComboBox
Grid.Column="1"
Padding="5,0,0,0"
DisplayMemberPath="Description"
SelectedItem="{Binding MaxXXAge, Mode=TwoWay, Converter={StaticResource MaxXXAgeToMaxXXAgeMemberConverter}}"
ItemsSource="{Binding ElementName=SettingsXXScrollViewer, Path=DataContext.MaxXXAgeMemberGroup, Mode=OneWay}" />
不过,在初始化之后,组合框为空。它实际上是在此之后正常工作。我可以选择并显示所选择的项目预期。它只是乍一看是行不通的。不过,我已经初始化MaxXXAge和转换器被触发。这是该集团
However, after initialization, the combobox is blank. It actually works fine after this. I can select and show the selected item as expected. It's just the first glance doesn't work. However, I already initialized MaxXXAge and the converter has been triggered. Here is the group
public IReadOnlyList<MaxXXAgeMembers> MaxXXAgeMemberGroup { get { return MaxXXAgeMembers.Options; } }
这是MaxXXAgeMembers
And this is the definition for MaxXXAgeMembers
public class MaxXXAgeMembers
{
public MaxXXAge MaxXXAge { get; private set; }
public string Description { get; private set; }
public static readonly IReadOnlyList<MaxXXAgeMembers> Options = new ReadOnlyCollection<MaxXXAgeMembers>(new[]
{
new MaxXXAgeMembers { MaxXXAge = MaxXXAge.OneDay, Description = Strings.SettingSync_OneDay},
.......
});
public static MaxXXAgeMembers FromMaxXXAge(MaxXXAge maxXXAge)
{
return Options.First(option => option.MaxXXAge == maxXXAge);
}
}
//添加了重写等于以后
//Added the Overriding Equals later
public override bool Equals(object obj)
{
if (obj == null || !(obj is MaxEmailAgeMembers))
return false;
return ((MaxEmailAgeMembers)obj).Description.Equals(this.Description);
}
public override int GetHashCode()
{
return this.Description.GetHashCode();
}
该转换器是这样的。
The converter is like this
public sealed class MaxEmailAgeToMaxEmailAgeMemberConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
return WPSettingsEmailViewModel.MaxEmailAgeMembers.FromMaxEmailAge((MaxEmailAge)value);
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
return ((WPSettingsEmailViewModel.MaxEmailAgeMembers)value).MaxEmailAge;
}
}
任何想法?
Any idea?
推荐答案
因为你没有在第一时间选择什么它是空白。如果我没有记错的话,你必须要么使用的SelectedItem
绑定您的选择或的SelectedValue
与 SelectedValuePath
。
It's blank because you don't have anything selected in the first place. If I'm not mistaken, you have to either use SelectedItem
to bind your selection or SelectedValue
with SelectedValuePath
.
其实,我从来没有使用的SelectedValue
与 SelectedValuePath
我自己,所以初始化这ComboBox.ItemSource将被绑定到项目收集后 - 例如的ObservableCollection<&人GT;人{搞定;设置;}
- 我还设置所选的项目属性人员SelectedPerson {搞定;设置;}
从集合中的一个值。然后我绑定ComboBox.SelectedItem这个属性,所以在初始化它显示预定义的选择的值。
I actually never use SelectedValue
with SelectedValuePath
myself, so after initializing collection of items which ComboBox.ItemSource will be binded to - for example ObservableCollection<Person> Persons {get; set;}
- I also set selected item property Person SelectedPerson {get; set;}
to one of the values from collection. Then I bind ComboBox.SelectedItem to this property, so on initialization it shows predefined selected value.
我想你可以达到同样的用的SelectedValue
和 SelectedValuePath
,但你必须一起使用它们这里描述。
I guess you can achieve the same with SelectedValue
and SelectedValuePath
, but you have to use them together as described here.
这篇关于为什么这样UWP组合框可以初始化后的空白,但可供选择正常工作?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!