gpt4 book ai didi

c# - 如何从 wpf 中的高级数据上下文获取数据上下文

转载 作者:太空宇宙 更新时间:2023-11-03 12:56:13 24 4
gpt4 key购买 nike

我有 A 类和 B 类:

    public class A : INotifyPropertyChanged
{
private string _ina;
public string InA
{
get
{
return _ina;
}
set
{
_ina = value;
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("InA"));
}
}
}
public A()
{
InA = "INA";
}
public event PropertyChangedEventHandler PropertyChanged;
}

public class B : INotifyPropertyChanged
{
private string _inb;
public string INB
{
get
{
return _inb;
}
set
{
_inb = value;
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("INB"));
}
}
}
public B()
{
INB = "B_inb";
}
public event PropertyChangedEventHandler PropertyChanged;
}

和一个 xaml(local 是 A 类和 B 类所在的命名空间别名):

    <Grid>
<Grid.DataContext>
<local:B/>
</Grid.DataContext>
<StackPanel>
<StackPanel.DataContext>
<local:A/>
</StackPanel.DataContext>
<TextBlock Text="{Binding Path=InA}"/>
<TextBlock Text="{Binding Path=INB }"/>
</StackPanel>
</Grid>

我知道第一个 TextBlock 会得到正确的值,但第二个不能。但是我怎样才能让 DataContext 使第二个 TextBlock 从网格的 DataContext 而不是从堆栈面板的 DataContext 获得正确的值?

最佳答案

当你正确地了解自己时,

<TextBlock Text="{Binding Path=DataContext.INB,RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Grid}}}"/>

会起作用。它所做的是沿着可视化树向上移动,直到它找到 Grid 类型的祖先,然后在该祖先中查找名为 DataContext.INB 的属性。在这种情况下,网格的数据上下文将是 B 类,INB 是其中定义的属性。

关于c# - 如何从 wpf 中的高级数据上下文获取数据上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33748579/

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