【问题标题】:How to create ObservableCollection with custom class in XAML (UWP)如何在 XAML (UWP) 中使用自定义类创建 ObservableCollection
【发布时间】:2019-08-29 09:43:40
【问题描述】:

我想在 XAML 中为 ComboBox ItemsSource 生成 ObservableCollection,如下所示。但是它会抛出异常,请帮助我。

 xmlns:coll="using:System.Collections.ObjectModel"

..

<ComboBox DisplayMemberPath="Text">
        <ComboBox.ItemsSource>
            <coll:ObservableCollection x:TypeArguments="local:EmployeeModel">
                <local:EmployeeModel Text="Male" Value="M"/>
                <local:EmployeeModel Text="Female" Value="F"/>
            </coll:ObservableCollection>
        </ComboBox.ItemsSource>
    </ComboBox>


 public class EmployeeModel
    {
        public string Text
        {
            get;
            set;
        }

        public object Value
        {
            get;
            set;
        }
    }

【问题讨论】:

    标签: xaml uwp observablecollection


    【解决方案1】:

    请在代码隐藏中生成ObservableCollection

    public ObservableCollection<EmployeeModel> EmployeeCollection = new ObservableCollection<EmployeeModel>();
    
    public MainPage()
    {
        this.InitializeComponent();
        EmployeeCollection.Add(new EmployeeModel{Text="Male",Value="M"});
        EmployeeCollection.Add(new EmployeeModel{Text="Female",Value="F"});
    }
    

    用法

    <ComboBox ItemsSource={x:Bind EmployeeCollection}
              ...
              />
    

    最好的问候。

    【讨论】:

    • 我知道代码背后的生成方式。我需要 XAML 创建是否可行。
    • 不幸的是,XAML 中不直接支持 ObservableCollection 类型。您能否提供这样做的原因,也许还有其他解决方案。
    【解决方案2】:

    如果您想在 XAML 中定义您的项目,则根本不需要 ObservableCollection&lt;T&gt;

    <ComboBox DisplayMemberPath="Text">
        <local:EmployeeModel Text="Male" Value="M"/>
        <local:EmployeeModel Text="Female" Value="F"/>
    </ComboBox>
    

    使用ObservableCollection&lt;T&gt; 的主要原因是当您绑定到可以动态添加或删除集合中的项目的视图模型时。如果您在 XAML 中设置内容,则应将项目添加到 Items 属性,而不是创建另一个集合。

    【讨论】:

    • 其实我的自定义控件 ItemsSource 属性的目的。所以我在 ObservableCollection 中询问了 ComboBox ItemsSource 数据生成的解决方案。
    • 我想有没有可能
    • 显然,您不能在 XAML 中使用 x:TypeArguments 创建 ObservableCollection。您应该能够创建一个继承自 ObservableCollection&lt;EmployeeModel &gt; 的类,并将 ItemsSource 设置为 XAML 中的 this 实例。
    • @MuneeshKumar:这能回答你的问题吗?
    猜你喜欢
    • 2010-11-24
    • 2016-06-24
    • 1970-01-01
    • 2013-07-15
    • 1970-01-01
    • 1970-01-01
    • 2020-07-27
    • 2019-05-09
    • 2017-07-27
    相关资源
    最近更新 更多