【问题标题】:WPF - binding to a property of a custom object that is inside another objectWPF - 绑定到另一个对象内的自定义对象的属性
【发布时间】:2011-05-26 06:27:58
【问题描述】:

我正在使用 WPF 4 / C#。我有两个自定义类:

public class c1 {
    public string prop1 { get; set; }

    public c1() {
        prop1 = "world";
    }
}

public class c2 {
    public string prop1 { get; set; }
    public c1 obj1 = new c1();

    public c2() {
        prop1 = "hello";
    }
}

在 XAML 中,我想绑定到这些类的属性。这是我所拥有的:

<Window.Resources>
    <my:c2 x:Key="c2"/>
</Window.Resources>
<StackPanel>
    <TextBlock DataContext="{DynamicResource c2}" Text="{Binding prop1}"/>
    <TextBlock DataContext="{DynamicResource c2}" Text="{Binding obj1.prop1}"/>
</StackPanel>

(这里&lt;my:c2 ../&gt; 实例化了c2 类。)第一个TextBlock 绑定有效。第二个没有。为什么我不能绑定到 obj1 上的属性?我似乎只能绑定到直接类的属性。我希望能够绑定到其他东西,例如属于直接类的数组中的元素或子类的属性,如上所示。我错过了什么?如果我使用 get/set 将 obj1.prop1 包装在直接类的另一个属性中,它就可以工作。但我不想这样做,特别是如果我开始使用数组,我不想将每个元素包装到一个单独的属性中!

【问题讨论】:

    标签: c# xaml c#-4.0 binding


    【解决方案1】:

    您的obj1 是一个字段,而不是一个属性,因此您无法访问 C1 对象。

    请考虑这个:

    public class c2 {
        public string prop1 { get; set; }
        private readonly c1 _obj1;
    
        public c2() {
            prop1 = "hello";
            _obj1 = new c1();
        }
    
        public c1 PropObj1 { get { return _obj1; } }
    }
    

    还有

    <TextBlock DataContext="{DynamicResource c2}" Text="{Binding PropObj1.prop1}"/>
    

    PS。下次最好使用具有标准命名约定(例如小写字段/变量、大写属性等)的示例,以让人们更快地看到问题!

    【讨论】:

      【解决方案2】:

      您不能绑定到字段,它们必须是属性。

      【讨论】:

      • 我正在尝试绑定到一个属性,它恰好在一个子对象上。出现问题是因为子对象是一个字段并且无法“绑定过去”以获取属性吗?
      • @mawrya 子对象本身也需要是一个属性,即prop1obj1 上的一个属性,但obj1 本身不是您的c2 类的属性。
      猜你喜欢
      • 2021-09-13
      • 2020-06-22
      • 1970-01-01
      • 2011-01-06
      • 2020-04-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-17
      • 2016-04-02
      相关资源
      最近更新 更多