将数据模板元素绑定到子类的属性

发布于 2024-09-03 15:27:10 字数 1616 浏览 3 评论 0原文

我有一个类,为了实验起见,将其称为 foo() ,另一个类,将其称为 bar()
我在 xaml 中定义了类 foo() 的数据模板,但 foo() 的属性之一是 bar() 对象,因此

foo()
{
    Public string Name {get; set;}
    Public int ID {get; set;}
    Public bar barProp {get; set;}
}

bar()
{
    Public string Description{get; set;}
}

希望 foo 的数据模板显示 bar 的 Description 属性。 我尝试了简单的 和变体,但无济于事

寻求智慧,
DJ

编辑: 根据要求提供更多信息...
这是我真正的类...

public class AccountRecord
{
    public string Value { get; set; }
    public string Identifier { get; set; }
    public Field AccountNumber;
}
public class Field
{
    public string Name{get;set;}
    public string Value{get;set}
}

这是用于模板化它们的 XAML...

<ListBox Margin="0,35,0,0" Name="listAccountRecords" Background="Transparent" BorderBrush="Transparent" ItemsSource="{Binding AccountRecords, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}">
    <ListBox.ItemTemplate>
            <DataTemplate DataType="{x:Type lib:AccountRecord}">
                <Expander Header="{Binding AccountNumber.Name}">                               
                    <ListView ItemsSource="{Binding Fields}" ItemTemplate="{DynamicResource FieldTemplate}">
                    </ListView>
                </Expander>
            </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

确切的问题是 AccountNumber.Name 值没有显示在 AccountRecord 元素的扩展标头中

I have a class, for experiment sake call it foo() and another class, call it bar()
I have a data template for class foo() defined in my xaml, but one of foo()'s properties is a bar() object such that

foo()
{
    Public string Name {get; set;}
    Public int ID {get; set;}
    Public bar barProp {get; set;}
}

and

bar()
{
    Public string Description{get; set;}
}

I want my data template of foo to display the Description property of bar.
I have tried the simple <textblock Text="{Binding Path=barProp.Description}" /> and variants to no avail

Seeking wisdom,
DJ

EDIT:
In accordance with requests for more information...
here are my real classes...

public class AccountRecord
{
    public string Value { get; set; }
    public string Identifier { get; set; }
    public Field AccountNumber;
}
public class Field
{
    public string Name{get;set;}
    public string Value{get;set}
}

and here is the XAML used to template them them...

<ListBox Margin="0,35,0,0" Name="listAccountRecords" Background="Transparent" BorderBrush="Transparent" ItemsSource="{Binding AccountRecords, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}">
    <ListBox.ItemTemplate>
            <DataTemplate DataType="{x:Type lib:AccountRecord}">
                <Expander Header="{Binding AccountNumber.Name}">                               
                    <ListView ItemsSource="{Binding Fields}" ItemTemplate="{DynamicResource FieldTemplate}">
                    </ListView>
                </Expander>
            </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

And the exact problem is that the AccountNumber.Name value is not showing up in the expander header for the AccountRecord element

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

小鸟爱天空丶 2024-09-10 15:27:10

您的“AccountNumber”成员(类型为“Field”)只是一个字段,而不是一个属性。您只能绑定到属性。给它一个 getter 和 setter,它就会开始工作。

Your "AccountNumber" member (of type "Field") is only a field, not a property. You can only bind to properties. Give it a getter and setter and it'll start working.

梦醒灬来后我 2024-09-10 15:27:10

试试这个

<textblock Text="{Binding Path=FooObjectName.barProp.Description}" />

希望这会起作用..
祝你好运 !

Try This

<textblock Text="{Binding Path=FooObjectName.barProp.Description}" />

Hope this will work..
Good Luck !

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文