为什么这样UWP组合框可以初始化后的空白,但可供选择正常工作? [英] Why this UWP ComboBox can be blank after initialization but works fine for selection?

查看:407
本文介绍了为什么这样UWP组合框可以初始化后的空白,但可供选择正常工作?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有这样一个组合框

<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屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆