如何在WPF(MVVM)中绑定datagrid列的宽度

Luk*_*101 1 c# wpf mvvm c#-4.0

我试图绑定datagrid列宽但不工作.

<DataGridTextColumn Binding="{Binding Name}" Width="{Binding GridNameWidth}" Header="Name" />
Run Code Online (Sandbox Code Playgroud)

这是后端代码:

public int GridNameWidth
{
    get
    {
        return 300;
    }
}
Run Code Online (Sandbox Code Playgroud)

永远不会触及后端代码.没有错误但该name字段具有默认宽度.我想将宽度绑定到我的属性.我不需要双向绑定只需要在网格加载时绑定宽度.这可能在wpf中吗?

Rac*_*hel 6

DataGridTextColumn是一个抽象对象,实际上并不是VisualTree的一部分,因此它不会像使用其他控件那样使用继承的DataContext.

WPF知道如何Binding正确地解析类似属性的东西并将绑定传递给每个Cell,但是像Width这样的东西只是按原样进行评估,并且没有正确评估,因为DataContext和VisualTree都没有按预期存在.

常见的解决方案是使用静态数据源编写绑定.这是基于此答案的示例,它使用x:Reference来引用XAML标记中的另一个控件:

{Binding Source={x:Reference MyDataGrid}, Path=DataContext.NameColumnWidth}
Run Code Online (Sandbox Code Playgroud)

或者,您可以DataGridCellTemplate使用一个控件定义您自己的控件,该控件的宽度绑定到DataItem上的属性