gpt4 book ai didi

wpf - DataContext 在 Style.Trigger 中未绑定(bind)

转载 作者:行者123 更新时间:2023-12-03 10:15:09 31 4
gpt4 key购买 nike

所以我有一些类似于以下的代码:(请原谅任何拼写错误——我试图在帖子的 SO 编辑器中简化)

<my:CustomContentControl>
<my:CustomContentControl.Style>
<Style TargetType="{x:Type my:CustomContentControl}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=CurrentView}" Value="MyCustomView">
<Setter Property="Content">
<Setter.Value>
<my:CustomView DataContext="{Binding DataContextForMyCustomView"/>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</m:CustomContentControl.Style>
</my:CustomContentControl>

问题是每当 DataTrigger发生,setter 设置 Content属性(property)给 my:CustomView , 但它 绑定(bind) DataContext .如果我将相同的代码移到触发器之外 DataContext绑定(bind)工作得很好。

有任何想法吗?如果这是某种限制,是否有任何解决方法?

更新:

我在输出窗口中收到以下错误:
System.Windows.Data Error: 3 : Cannot find element that provides DataContext. BindingExpression:Path=DataContextForMyCustomView; DataItem=null; target element is 'CustomView' (Name='customView'); target property is 'DataContext' (type 'Object')

最佳答案

您发布的错误听起来像是您的自定义控件位于没有 DataContext 的对象中。 ,例如 DataGridColumn.Header .

为了解决这个问题,您可以创建一个 Freezeable您的 .Resources 中的对象包含您要查找的绑定(bind),然后绑定(bind)您的my:CustomView.DataContext对那个对象

<my:CustomContentControl.Resources>
<local:BindingProxy x:Key="proxy"
Data="{Binding DataContextForMyCustomView, ElementName=MyControl}" />
</my:CustomContentControl.Resources>

...

<my:CustomView DataContext="{Binding Source={StaticResource proxy}}"/>

这是示例代码 Freezablehere 复制的对象:
public class BindingProxy : Freezable
{
#region Overrides of Freezable

protected override Freezable CreateInstanceCore()
{
return new BindingProxy();
}

#endregion

public object Data
{
get { return (object)GetValue(DataProperty); }
set { SetValue(DataProperty, value); }
}

// Using a DependencyProperty as the backing store for Data.
// This enables animation, styling, binding, etc...
public static readonly DependencyProperty DataProperty =
DependencyProperty.Register("Data", typeof(object),
typeof(BindingProxy), new UIPropertyMetadata(null));
}

另外,你真的应该使用 ContentTemplate而不是 Content如果多个对象应用该样式,以避免异常:)

关于wpf - DataContext 在 Style.Trigger 中未绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12398419/

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