【问题标题】:C# WPF DataGrid Binding from another class来自另一个类的 C# WPF DataGrid 绑定
【发布时间】:2018-08-12 10:15:54
【问题描述】:

我有一个窗口,我想在其中从另一个类自动生成 ObservableCollection。在后端设置时,一切正常:

XAML

<DataGrid Name="ResidenceGrid" AutoGenerateColumns="True"/>

CS
public ResidenceWindow()
    {
        InitializeComponent();
        ResidenceGrid.ItemsSource = Manager.ResidenceList;
    }

但是当我尝试在 xaml 中完成所有操作时,DataGrid 显示为空白:

XAML

<DataGrid Name="ResidenceGrid" ItemsSource="{Binding Path=Manager.ResidenceList, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" AutoGenerateColumns="True"/>

CS
public ResidenceWindow()
    {
        InitializeComponent();
    }

从另一个类调用的 ObservableCollection 以防万一:

static class Manager
{
    public static ObservableCollection<Residence> ResidenceList { get; set; } = new ObservableCollection<Residence>();
}

知道我在这里缺少什么吗?

【问题讨论】:

    标签: c# wpf binding datagrid


    【解决方案1】:

    如果你想使用Binding,你需要在你的ResidenceWindow中设置DataContext。

    例如:

    public ResidenceWindow()
    {
        InitializeComponent();
        this.DataContext = Manager;
    }
    

    https://www.wpf-tutorial.com/data-binding/using-the-datacontext/

    【讨论】:

    • Manager 类是静态的。如果我尝试这个,我会得到“Manager 是一种类型,在给定的上下文中是无效的”。有什么办法绕过这个吗?我尝试在 xaml 中的 MainWindow 中设置 DataContext,但无济于事。没有错误,但仍然是空的 DataGrid。
    【解决方案2】:

    您可以像这样绑定到静态Manager.ResidenceList 属性:

    <DataGrid Name="ResidenceGrid" ItemsSource="{x:Static local:Manager.ResidenceList}" AutoGenerateColumns="True"/>
    

    并且没有理由将ItemsSource 属性的绑定的Mode 设置为TwoWay,也没有理由将UpdateSourceTrigger 设置为PropertyChanged

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-29
      • 2014-03-17
      • 2016-10-07
      • 2022-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多