【问题标题】:observable collection static resource in xaml c#xaml c#中的可观察集合静态资源
【发布时间】:2020-09-10 11:03:20
【问题描述】:

我想创建一个可观察的集合并将其绑定到组合框下拉列表的 itemsource。我需要使这个集合成为一个资源(页面/网格),以便能够在数据模板中绑定到它。 在定义类结构时需要帮助。一个示例类结构真的很有帮助。收集非常简单,例如所有国家的名单。重要的要求是我应该能够向其中添加项目。 基本上是一个包含国家(字符串)的集合,允许我添加项目。

【问题讨论】:

    标签: c# uwp uwp-xaml


    【解决方案1】:

    xaml c#中的可观察集合静态资源

    为此,您可以在代码隐藏中自定义ObservableCollection 类,然后在xaml 中实现它。

    例如:

    public class CountrysObservableCollection : ObservableCollection<string>
    {
    
        public CountrysObservableCollection()
        {
    
        }
    }
    

    Xaml

    <Page.Resources>
        <local:CountrysObservableCollection x:Key="Countrys">
            <x:String>China</x:String>
            <x:String>USA</x:String>
            <x:String>Japan</x:String>
            <x:String>England</x:String>
            <x:String>Russia</x:String>
            <x:String>Korea</x:String>
            <x:String>Canada</x:String>
            <x:String>Australia</x:String>
        </local:CountrysObservableCollection>
    </Page.Resources>
    

    用法

    <ComboBox ItemsSource="{StaticResource Countrys}"/>
    

    更新数据源

    private  void Button_Click(object sender, RoutedEventArgs e)
    {
        var countrys = Resources["Countrys"] as ObservableCollection<string>;
        countrys.Add("New World");
    }
    

    更新

    <Application.Resources>
        <ResourceDictionary>
            <local:CountrysObservableCollection x:Key="Countrys">
                <x:String>China</x:String>
                <x:String>USA</x:String>
                <x:String>Japan</x:String>
                <x:String>England</x:String>
                <x:String>Russia</x:String>
                <x:String>Korea</x:String>
                <x:String>Canada</x:String>
                <x:String>Australia</x:String>
            </local:CountrysObservableCollection>
        </ResourceDictionary>
    </Application.Resources>
    
    
    
     private  void Button_Click(object sender, RoutedEventArgs e)
     {
         var countrys = Application.Current.Resources["Countrys"]as ObservableCollection<string>;  
         countrys.Add("New World");
     }
    

    【讨论】:

    • 在初始化组合框后,您能否告诉我从 c# 向此类添加项目的语法。例如当用户添加另一个国家/地区时
    • 当然,您可以在页面类中使用var countrys = Resources["Countrys"] as ObservableCollection&lt;string&gt;; 获取此集合。
    • 非常感谢您的帮助。我试过了,除了最后一点,它似乎在工作。我需要在一个页面上单击按钮,在另一个页面上(单独的窗口)更新国家/地区。那么,有没有一种方法可以将可观察集合声明为应用程序资源而不是页面资源,以便所有页面都可以访问它?我正在寻找一种方法来允许一个页面添加国家和第二个页面能够看到更改
    • 好的,你可以把上面放到应用的应用资源中
    • 我收到以下错误:CountrysObservableCollection 类型的值无法添加到“IList'1”类型的集合或字典中
    【解决方案2】:

    网络上有大量示例。这是一个简单的:Explain Combo Box Binding In MVVM - WPF

    【讨论】:

    • 我找不到 UWP 示例。你能分享一个吗?我需要什么类型的课程?我应该在谷歌上搜索什么?
    • 我尝试了 Persons 示例,我可以显示组合框。但是,如何在我的代码中动态添加更多项目。例如如果我想允许用户添加新的人。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-28
    • 2011-12-03
    • 1970-01-01
    • 2017-03-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多