我有一个简单的组合框,里面有一个复选框,如下所示:
<ComboBox Height="23" HorizontalAlignment="Left" Margin="158,180,0,0" Name="comboBox1" VerticalAlignment="Top" Width="120" ItemsSource="{Binding collection}">
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<CheckBox Content="{Binding Name}"></CheckBox>
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
数据上下文只是背后的代码,为了测试它,我使用以下代码:
public ObservableCollection<Foo> collection { get; set; }
private void button1_Click(object sender, RoutedEventArgs e)
{
collection = new ObservableCollection<Foo>();
this.comboBox1.ItemsSource = collection;
Foo f = new Foo("DSD");
collection.Add(f);
}
当我按照代码中的方式设置 ItemsSource 时,它工作正常,但我想在 Xaml 中设置 ItemsSource,但使用上面的 Xaml 时它不起作用。我也尝试将其设置为 Path =“”。有人知道为什么吗?
谢谢
最佳答案
您需要将 DataContext 分配给控件。像这样:
var window = new Window1();
window.DataContext = new WindowDC();
window.Show();
其中 Window1
类包含组合框,WindowDC 类似于:
public class WindowDC
{
public ObservableCollection<Foo> collection { get; set; }
}
这就是它的工作原理。
您实际上所做的是将collection
放入控件类中,并仅为组合框设置数据上下文。
但是,出于测试目的,您仍然可以在控件构造函数中设置 Combox.Datacontext。
关于c# - WPF ItemsSource 在代码隐藏中工作,但在 XAML 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6292271/