gpt4 book ai didi

c# - 用户控件的子依赖对象的绑定(bind)不起作用

转载 作者:行者123 更新时间:2023-11-30 12:35:41 28 4
gpt4 key购买 nike

我正在尝试获取绑定(bind)以处理用户控件的子对象。 Xaml 看起来像这样:

<MyGrid>
<MyColumn ExtendedColumnData="{Binding ColumnToolTipDescriptions}"/>
</MyGrid>

类的定义如下:

[ContentProperty("Columns")]
public class MyGrid : UserControl
{
private MyColumnCollection _columns;

[DesignerSerializationVisibility(DesignerSerializationVisibility.Content), Category("Data")]
public MyColumnCollection Columns
{
get
{
if (_columns == null)
_columns = new MyColumnCollection();

return _columns;
}
}
}

public class MyColumnCollection : ObservableCollection<MyGridColumn>
{
}

public class MyGridColumn : DependencyObject
{
public object ExtendedColumnData
{
get { return (object)GetValue(ExtendedColumnDataProperty); }
set { SetValue(ExtendedColumnDataProperty, value); }
}

public static readonly DependencyProperty ExtendedColumnDataProperty =
DependencyProperty.Register("ExtendedColumnData", typeof(object), typeof(MyGridColumn), new UIPropertyMetadata(null));
}

据我所知,绑定(bind)甚至没有尝试获取数据,因为我已尝试将转换器置于绑定(bind)上,而且 Convert 方法上的断点从未被击中。

我正在使用 MVVM 模式,因此窗口的 DataContext 属性设置为 View 模型。

我在这里阅读了一些其他问题并尝试了各种绑定(bind)排列,例如:

<MyColumn ExtendedColumnData="{Binding DataContext.ColumnToolTipDescriptions, ElementName=MyViewName}" />
<MyColumn ExtendedColumnData="{Binding DataContext.ColumnToolTipDescriptions, RelativeSource={RelativeSource AncestorType={x:Type local:MyView}}" />

但仍然不走运,绑定(bind)没有触发!烦人的是,这似乎工作正常(如果我将属性添加到网格):

<MyGrid ExtendedColumnData="{Binding ColumnToolTipDescriptions}">
<MyColumn />
</MyGrid>

我对 WPF 没有那么多经验,所以我确定我遗漏了什么?

最佳答案

问题是 MyColumnCollection 没有继承数据上下文(控件的常用属性不是继承上下文的一部分)。如果您没有数据上下文绑定(bind)将不起作用。

要解决这个问题,请尝试继承 MyColumnCollection,而不是从 ObservableCollection,而是从 FreezableCollection(可卡住属性是继承上下文的一部分)。

关于c# - 用户控件的子依赖对象的绑定(bind)不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4956041/

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