使列表可用于WPF应用程序中的所有Windows

时间:2015-01-24 21:59:56

标签: c# wpf

通过WPF应用程序使用产品列表。列表lstProducts是在应用程序的业务层中创建的。该列表随着时间的推移相当稳定......产品每6个月更新一次。

如何在C#中实例化该列表,使其在整个应用程序中可用?

我的C#Class创建了一个列表

namespace BusinessObjects
{
public class Products
{
    public class Product
    {
        public Int64 ProductId { get; set; }
        public string FileAs { get; set; }
    }

    public List<Product> lstFileAs { get; set; }

    public Products()
    {
                    //populate lstFileAs
    }
}
}

各种形式的组合框数据绑定如下

products = new Products());
cboProducts.DataContext = products;
cboProducts.ItemsSource = products.lstFileAs;
cboCustomer.DisplayMemberPath = "FileAs";

我们请将其视为已阅读,我们都希望避免全局变量。然而,我们在一个使用全局变量的旧的和广泛使用的应用程序上放置了一个新的前端。旧的应用程序是用VB6编写的,尽管使用全局变量但运行良好。我们被指示进行最小的更改,以避免不必要地引入错误。

1 个答案:

答案 0 :(得分:2)

您可以在App.xaml中创建ObjectDataProvider和CollectionViewSource(例如)并在项目中引用它。我在这里演示了一个可能的实现此代码假定您创建了一个GetProducts()方法。

的App.xaml:

            <ObjectDataProvider x:Key="ProductsObjDataProvider" 
                            ObjectType="{x:Type BusinessObjects:Products}"
                            MethodName="GetProducts">                
        </ObjectDataProvider>

        <CollectionViewSource x:Key="ProductsView" Source="{Binding Source={StaticResource ProductsObjDataProvider}}"/>

绑定组合框:

                <ComboBox  Name="cboProducts"
                  DisplayMemberPath="FileAs"
                  ItemsSource="{Binding Source={StaticResource ProductsView}}"
                  SelectedValue="{Binding Path=ProductID, Mode=TwoWay}"/>