【问题标题】:Bind string observer collection to combobox将字符串观察者集合绑定到组合框
【发布时间】:2013-07-27 06:25:14
【问题描述】:

我可以从这里找到同样的问题。我尝试了所有方法。但他们都没有解决我的问题。所以请不要将此标记为重复。

这就是我想要做的。我有一个字符串列表,我想将列表项绑定到组合框。

请任何人帮助我找出我在这里做错了什么。

XAML

<ComboBox Name="comboBox1" ItemsSource="{Binding AvailableTypes}" DataContext="{Binding AvailableTypes}"/>  

.cs 文件

    ObservableCollection<string> availableTypes = new ObservableCollection<string>();

    public ObservableCollection<string> AvailableTypes { get { return availableTypes ; } }

    public Window1()
    {            
        InitializeComponent();
        availablePayTypes.Add("Type1");  
        availablePayTypes.Add("Type1");           
    }  

数据未绑定到组合框。如果我按照以下方式进行操作。

comboBox1.ItemsSource=AvailableTypes;  

我的代码有什么问题。请帮我。

谢谢。

【问题讨论】:

    标签: c# wpf xaml


    【解决方案1】:

    至少有两件事是错误的。首先,您有一个错字——ItemsSource="{Binding AvailablePayTypes}" 应该是 AvailableTypes 以匹配属性名称。

    其次,您不需要同时设置DataContextItemsSource。通常,您会将 XAML 根的 DataContext 设置为您的代码隐藏类,然后使用 ItemsSource="{Binding AvailableTypes}"

    请注意,您可以从代码隐藏中设置 DataContext:

    public Window1()
    {            
        InitializeComponent();
        availablePayTypes.Add("Type1");  
        availablePayTypes.Add("Type1");           
        LayoutRoot.DataContext = this;
    }  
    

    或者从 XAML 本身使用 RelativeSource:

    <UserControl
        DataContext="{Binding RelativeSource={RelativeSource Self}}" />
    

    【讨论】:

    • 感谢您的支持。实际上我的代码存在复制和粘贴错误。
    【解决方案2】:

    DataContext 和 ItemsSource 绑定的组合不正确。

    这将起作用:

    <ComboBox Name="comboBox1" ItemsSource="{Binding AvailableTypes}" /> 
    

    在你的构造函数中:

    public Window1()
    {            
        InitializeComponent();
        DataContext = this; // <--
        availablePayTypes.Add("Type1");  
        availablePayTypes.Add("Type1");           
    }  
    

    这是怎么回事?

    1. 您绑定到AvailablePayTypes,而集合名为AvailableTypes
    2. 您正在将 DataContext 绑定到 AvailablePayTypes。但这不起作用,因为您的 Window 本身没有设置 DataContext,因此 WPF 不知道在哪里寻找 AvailablePayTypes
    3. 您正在将 ItemsSource 绑定到 AvailablePayTypes。即使先前的 DataContext 绑定有效,WPF 现在也会在集合 AvailablePayTypes 上查找名为 AvailablePayTypes 的属性。这显然是错误的。

    我对您的代码进行了以下更改:

    1. 修正错字
    2. 移除了对ComboBox的DataContext的绑定,使其继承自Window
    3. 在 Window 的构造函数中,我将 DataContext 设置为自身。

    【讨论】:

    • 感谢您的支持。实际上我的代码有复制和粘贴错误。无论如何感谢您的指导。
    猜你喜欢
    • 2013-05-21
    • 1970-01-01
    • 1970-01-01
    • 2016-12-15
    • 1970-01-01
    • 1970-01-01
    • 2011-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多