我可以从这里找到同样的问题。我尝试了所有方法。但他们都没有解决我的问题。所以请不要将其标记为重复。
这就是我想要做的。我有一个字符串列表,我想将列表项绑定到组合框。
可以请任何人帮助我找到我在这里做的错误。
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;
我的代码有什么问题。请帮我。
谢谢。
答案 0 :(得分:2)
至少有两件事是错的。首先,您有一个拼写错误 - ItemsSource="{Binding AvailablePayTypes}"
应该是AvailableTypes
以匹配媒体资源名称。
其次,您无需同时设置DataContext
和ItemsSource
。通常,您将XAML根的DataContext
设置为代码隐藏类,然后使用ItemsSource="{Binding AvailableTypes}"
。
请注意,您可以从代码隐藏设置DataContext:
public Window1()
{
InitializeComponent();
availablePayTypes.Add("Type1");
availablePayTypes.Add("Type1");
LayoutRoot.DataContext = this;
}
或者使用RelativeSource
来自XAML本身:
<UserControl
DataContext="{Binding RelativeSource={RelativeSource Self}}" />
答案 1 :(得分:1)
DataContext和ItemsSource绑定的组合不正确。
这将有效:
<ComboBox Name="comboBox1" ItemsSource="{Binding AvailableTypes}" />
在你的构造函数中:
public Window1()
{
InitializeComponent();
DataContext = this; // <--
availablePayTypes.Add("Type1");
availablePayTypes.Add("Type1");
}
这里发生了什么?
AvailablePayTypes
时,您绑定到AvailableTypes
。AvailablePayTypes
。但这不起作用,因为您的Window本身没有DataContext集,因此WPF不知道在哪里查找AvailablePayTypes
。AvailablePayTypes
。即使DataContext的先前绑定有效,WPF现在也会在集合AvailablePayTypes
上查找名为AvailablePayTypes
的属性。这显然是错误的。我对您的代码进行了以下更改: