WPF - привязка к свойству пользовательского объекта, который находится внутри другого объекта - PullRequest
9 голосов
/ 16 декабря 2010

Я работаю в 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>

(Здесь <my:c2 ../> создает экземпляр класса c2.) Первая привязка TextBlock работает. Второго нет. Почему я не могу привязать к свойству на obj1? Я только, кажется, могу связать со свойствами непосредственного класса. Я хочу иметь возможность связываться с другими вещами, такими как элемент в массиве, который принадлежит непосредственному классу или свойству дочернего класса, как показано выше. Что мне не хватает? Если я оберну obj1.prop1 в другое свойство непосредственного класса, используя get / set, это сработает. Но я не хочу этого делать, особенно если я начну использовать массивы, я не хочу заключать каждый элемент в отдельное свойство!

Ответы [ 2 ]

14 голосов
/ 16 декабря 2010

Ваш 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.В следующий раз лучше использовать пример со стандартными соглашениями об именах (например, строчные поля / переменные, свойства верхнего регистра и т. Д.), Чтобы люди могли быстрее увидеть проблему!

10 голосов
/ 16 декабря 2010

Вы не можете привязать к полям, они должны быть свойствами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...