【发布时间】:2020-04-23 13:38:48
【问题描述】:
我正在尝试实现一些简单的事情,并且我相信我的方法可能是错误的。我正在创建一个数据网格,其中第一列的宽度与其他列分开。我正在使用 AutoGenerateColumns=true,因为它简化了我的工作。我不能使用纯 XAML,因为在运行前我不知道列的数量,并且我无法连接 XAML 和 AutoGenerateColumns,因此它将使用第一列的布局,然后生成其余列。
我的方法:
1) 创建两个彼此相邻的数据网格 - 这种方法的问题是需要管理 2 个单独的数据网格,我看到滚动和调整它们的大小的问题,所以我决定改变我的方法,以保持一切都在一个 DataGrid,因为数据相互关联。
2) 尝试从 Code-Behind 获取 Datagrid 对象,以便我可以从 ViewModel 类中设置 Width 属性,这会破坏 MVVM 模型,并且我也很难实现
3) 当前方法 - 使用 AutoGeneratingColumn 事件,我捕获第一列并尝试绑定到它的 WidthProperties。不幸的是,这似乎不起作用,我不知道为什么。
这是包含 DataGrid 的 XAML 的代码隐藏文件
private void DG1_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
string headername = e.Column.Header.ToString();
//Cancel the column you don't want to generate
if (headername == "DATE")
{
Binding binding = new Binding("DateColumnWidth");
binding.Source = DataGrid.DataContext; // DataGrid is the name of the DataGrid
binding.Mode = BindingMode.TwoWay;
binding.Path = new PropertyPath("DateColumnWidth");
BindingOperations.SetBinding(e.Column, ColumnDefinition.MinWidthProperty, binding);
BindingOperations.SetBinding(e.Column, ColumnDefinition.MaxWidthProperty, binding);
e.Column.Header = "Test";
}
}
这是我在 ViewModel 中的属性。在调试绑定源时,它附加到正确的类,我看到了我的所有属性。它还会更改右列的标题。
private int _DateColumnWidth;
public int DateColumnWidth
{
get { return _DateColumnWidth; }
set
{
_DateColumnWidth = value;
RaisePropertyChanged("DateColumnWidth");
}
}
我设置调试器显示所有数据绑定跟踪信息,没有出现问题,但宽度没有更新。 我做错了什么?
【问题讨论】:
-
你真的需要绑定吗?如果没有,为什么不直接在 AutoGeneratingColumn 事件中设置宽度?
-
因为我之后要调整整个网格的大小,并且我希望能够调整第一列
标签: c# wpf data-binding datagrid