gpt4 book ai didi

c# - WPF DataGrid - 将源和宽度绑定(bind)到不同的对象

转载 作者:行者123 更新时间:2023-12-03 10:28:27 25 4
gpt4 key购买 nike

在我的 WPF 应用程序中,我有一个绑定(bind)到 View 模型中的集合的 DataGrid,但我希望第一列的宽度等于 View 模型本身的属性,如下所示:

public ObservableCollection<Booking> Bookings
{
return repository.Bookings();
}

public int MaxWidth
{
return 100;
}

(我意识到绑定(bind)到这样的固定属性是没有意义的——它是出于演示目的)
<UserControl>
<DataGrid DataContext="{Binding Bookings}">
<DataGrid.Columns>
<DataGridTextColumn Width="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}, Path=DataContext.MaxWidth}" Header="Provider" Binding="{Binding Name}" />
</DataGrid.Columns>
</DataGrid>
</UserControl>

但是如果我这样做,列的宽度将保持在默认值 - 即足够宽以容纳其值。

我究竟做错了什么?

编辑:尝试了这个,看看发生了什么:
<Label Name="tricky" Content="500" Visibility="Collapsed"></Label>
...
<DataGridTextColumn Width="{Binding ElementName=tricky, Path=Content}" Header="Provider" Binding="{Binding Name}" />

什么都没做。不能动态设置宽度吗?

最佳答案

我认为问题是DataGridTextColum不是可视树的一部分(可以通过 Snoop 进行验证),因此绑定(bind)永远不会得到解决。

数据来源于DataGridTextColumn用于构建 DataGridCell 模板,在构建模板时,DataContext没有设置。

我的建议是使用 DataGridTemplateColumn , 并指定您自己的 CellTemplate具有 Width您需要的绑定(bind)。

关于c# - WPF DataGrid - 将源和宽度绑定(bind)到不同的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22612636/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com