【问题标题】:Populating UWP Combobox from code从代码填充 UWP 组合框
【发布时间】:2018-01-07 07:46:57
【问题描述】:

我正在尝试从代码中填充组合框,而不是在 XAML 上定义值。但是,无论我尝试绑定方法还是从列表中设置它们,我似乎都无法让它工作。

下面的类

    public class Quote
    {
        public int Value;
        public string DisplayValue; 
    }

还有下面的 Observable Collection

    public ObservableCollection<Quote> QuoteCollection
    {
        get
        {
            return new ObservableCollection<Quote>
            {
               new Quote{ DisplayValue = "6", Value = 6 },
               new Quote{ DisplayValue = "12", Value = 12 },
               new Quote{ DisplayValue = "18", Value = 18 },
               new Quote{ DisplayValue = "24", Value = 24 },
               new Quote{ DisplayValue = "30", Value = 30 },
               new Quote{ DisplayValue = "36", Value = 36 },
               new Quote{ DisplayValue = "42", Value = 42 },
               new Quote{ DisplayValue = "48", Value = 48 },
               new Quote{ DisplayValue = "54", Value = 54 },
               new Quote{ DisplayValue = "60", Value = 60 }
            };
        }
    }

我似乎无法让它工作,当我像这样绑定它时似乎什么也没发生:

<local:ExtendedComboBox x:Name="quotes" ItemsSource="{Binding QuoteCollection}" DisplayMemberPath="DisplayValue"/>

当我尝试从这样的集合列表中添加它时:

        quotes.ItemsSource = new List<Quote>
        {
            new Quote{ DisplayValue = "6", Value = 6 },
            new Quote{ DisplayValue = "12", Value = 12 },
            new Quote{ DisplayValue = "18", Value = 18 },
            new Quote{ DisplayValue = "24", Value = 24 },
            new Quote{ DisplayValue = "30", Value = 30 },
            new Quote{ DisplayValue = "36", Value = 36 },
            new Quote{ DisplayValue = "42", Value = 42 },
            new Quote{ DisplayValue = "48", Value = 48 },
            new Quote{ DisplayValue = "54", Value = 54 },
            new Quote{ DisplayValue = "60", Value = 60 }
        };

组合框似乎被填充了一些东西,但所有选项都是空白的。

ExtendedComboBox 直接取自 here,两种解决方案均取自 here

【问题讨论】:

    标签: c# xaml combobox uwp


    【解决方案1】:

    您的 Binding 属性是常规属性,但没有 getter 和 setter。所以你需要把你的班级改成下面。

    public class Quote
    {
        public int Value { get; set; }
        public string DisplayValue { get; set; }
    }
    

    我没有对此进行测试,但它应该可以解决问题。

    【讨论】:

    • 它仍然没有显示任何内容。我只是通过将 ItemsSource 分配给 List 然后在需要使用它时将值转换为 int32 来“解决它”。
    • @user8296390 这是你在那里做的一些糟糕的黑客行为。您的可观察收集方式是有问题的,因为您总是返回一个新实例。如果您像上次一样手动设置项目来源,则此答案应该有效。
    【解决方案2】:

    除了来自AVK 的 Getter 和 Setter 声明建议,您还需要确保 Page.DataContext 已正确设置。

    例如构造方法:

    public MainPage()
    {
        this.InitializeComponent();
        this.DataContext = this; //Here
    }
    

    收藏:

    public ObservableCollection<Quote> QuoteCollection
    {
                get
                {
                    return new ObservableCollection<Quote>
                {
                   new Quote{ DisplayValue = "6", Value = 6 },
                   new Quote{ DisplayValue = "12", Value = 12 },
                   new Quote{ DisplayValue = "18", Value = 18 },
                   new Quote{ DisplayValue = "24", Value = 24 },
                   new Quote{ DisplayValue = "30", Value = 30 },
                   new Quote{ DisplayValue = "36", Value = 36 },
                   new Quote{ DisplayValue = "42", Value = 42 },
                   new Quote{ DisplayValue = "48", Value = 48 },
                   new Quote{ DisplayValue = "54", Value = 54 },
                   new Quote{ DisplayValue = "60", Value = 60 }
                };
                }
    }
    

    自定义类:

    public class Quote
    {
                public int Value { get; set; }
                public string DisplayValue { get; set; }
    }
    

    【讨论】:

      猜你喜欢
      • 2015-05-23
      • 2017-05-10
      • 1970-01-01
      • 2013-06-22
      • 2011-11-20
      • 2013-12-19
      • 2012-09-11
      • 2011-12-12
      相关资源
      最近更新 更多