c# - WPF ItemsSource 在代码隐藏中工作,但在 XAML 中不起作用

标签 c# wpf itemssource

我有一个简单的组合框,里面有一个复选框,如下所示:

<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/

相关文章:

c# - 将逐个元素添加到 ListView 而不阻塞 UI

c# - IAsyncEnumerable 用于永无止境的流

c# - TextBlock 上的 TiltEffect

c# - 一个简单的 C# DLL - 如何从 Excel、Access、VBA、VB6 调用它?

c# - 控制台应用程序中的 Application.Current "null"

c# - 在 winforms 中创建日历的最佳方法是什么?

c# - 选择正确的 ItemsSource 容器

c# - DateTime[] 和 Object[] 问题

c# - 如何对 Visual3D 或 UIElement3D 等 3D 元素使用数据绑定(bind)

wpf - 将 UserControl 中元素的 ItemSource 绑定(bind)到父 ViewModel 中的项目