gpt4 book ai didi

.net - WPF 数据网格文本列中的绑定(bind)

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

我正在尝试构建一个数据网格,其中一列是以该字体显示的字体名称。以前,我正在使用一个列表框,我在其中定义了以下模板:

<TextBlock Text="{Binding Path=Name}" FontFamily="{Binding Path=Name}"/>

这工作得很好。所以,我调整了数据结构(Name 变成了 Font.Name)并移动到数据网格上来试试这个:
<dg:DataGridTextColumn Binding="{Binding Font.Name}" 
FontFamily="{Binding Font.Name}" IsReadOnly="True" Header="Font"/>

现在字体名称都以默认字体显示,我得到这个错误:
System.Windows.Data Error: 2 : Cannot find governing FrameworkElement or 
FrameworkContentElement for target element.
BindingExpression:Path=Font.Name; DataItem=null; target element is
'DataGridTextColumn' (HashCode=56915998); target property is 'FontFamily'
(type 'FontFamily')

一些处理自定义控件的 Google 结果建议将属性从 DependencyObject 更改为 FrameworkElement,但我必须继承 DataGridTextColumn 并定义我自己的属性才能这样做 - 必须有更好的方法。

我尝试了几种不同的绑定(bind)方法,包括尝试使用我的数据类中的不同属性(即 FontSize="{Binding FontSize}" )仅更改字体大小。他们都导致了与上述相同的错误。

有人知道我在这里做错了什么吗?

编辑:

感谢Jared的回复,我发现了以下内容:

https://docs.microsoft.com/en-us/archive/blogs/jaimer/forwarding-the-datagrids-datacontext-to-its-columns

该方法看起来不错,但我需要为每一行创建一个引用 DataContext 中正确元素的绑定(bind),而不是为整个列共享一个值。

后面的代码:
fontDataGrid.DataContext = from font 
in new InstalledFontCollection().Families;

XAML:
Binding="{Binding Font.Name}"
FontFamily="{Binding (FrameworkElement.DataContext).Font.Name,
RelativeSource={x:Static RelativeSource.Self}}"

使用上面的 XAML 显然是不正确的,因为 DataContext 是整个字体集合。但我无法索引集合,因为我不知道行号是什么(或者我知道吗?)。有什么方法可以用来实现这一目标吗?

还有一个次要问题 - 为什么 Binding 属性似乎工作得很好,即使没有 DataContext?它是在看 ItemsSource 吗?

最佳答案

Jared 的回答是正确的,但我找到了解决我问题的具体解决方案。

http://blogs.msdn.com/vinsibal/archive/2008/12/17/wpf-datagrid-dynamically-updating-datagridcomboboxcolumn.aspx

按照此示例,我将 DataGridTextColumn 定义更改为:

<dg:DataGridTextColumn Binding="{Binding Font.Name}" IsReadOnly="True" Header="Font">
<dg:DataGridTextColumn.ElementStyle>
<Style TargetType="TextBlock">
<Setter Property="FontFamily" Value="{Binding Font.Name}" />
</Style>
</dg:DataGridTextColumn.ElementStyle>
</dg:DataGridTextColumn>

而且我不需要担心继承DataContext的列。这给了我想要的结果。

关于.net - WPF 数据网格文本列中的绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/502389/

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