0

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

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

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

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;  

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

谢谢你。

4

2 回答 2

2

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

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

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

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

或者从 XAML 本身使用RelativeSource

<UserControl
    DataContext="{Binding RelativeSource={RelativeSource Self}}" />
于 2012-11-29T07:31:30.130 回答
1

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 现在也会查找名为AvailablePayTypescollection的属性AvailablePayTypes。这显然是错误的。

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

  1. 修正错字
  2. 移除了对 ComboBox 的 DataContext 的绑定,使其继承自 Window
  3. 在 Window 的构造函数中,我将 DataContext 设置为自身。
于 2012-11-29T07:31:01.200 回答