我正在尝试绑定(bind)一个数据网格列的宽度,但不起作用。

<DataGridTextColumn Binding="{Binding Name}" Width="{Binding GridNameWidth}" Header="Name" />

这是后端代码:
public int GridNameWidth
{
    get
    {
        return 300;
    }
}

永远不会触碰到后端代码。没有错误,但name字段具有默认宽度。我想使宽度绑定(bind)到我的属性(property)。我不需要双向绑定(bind),只需要在网格加载时绑定(bind)宽度即可。在wpf中这可能吗?

最佳答案

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

WPF知道如何正确解析诸如Binding属性之类的内容并将绑定(bind)转移到每个Cell,但是诸如Width之类的内容只是按原样进行评估,并且由于DataContext和VisualTree都不存在,因此无法正确评估。

常见的解决方案是改为使用静态数据源编写绑定(bind)。这是一个基于this answer的示例,该示例使用x:Reference引用XAML标记中的另一个控件:

{Binding Source={x:Reference MyDataGrid}, Path=DataContext.NameColumnWidth}

另外,您可以定义一个自己的DataGridCellTemplate,该控件的Width绑定(bind)到DataItem上的任何属性

关于c# - 如何在WPF(MVVM)中绑定(bind)数据网格列宽度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30241116/

10-12 12:44
查看更多