WPF - привязка в XAML к объекту, созданному в коде - PullRequest
3 голосов
/ 02 декабря 2009

Может ли объект, созданный в коде (например, C #), использоваться для привязки в XAML?

Например:

public class MyForm
{
    private MyComplexObject complexObject;

    public MyForm()
    {
        InitializeComponent();
    }

    public OnButtonClick(object sender, RoutedEventArgs e)
    {
        complexObject = new MyComplexObject();
    }
}

complexObject не создается до нажатия кнопки. Но как только эта кнопка нажата, я хотел бы, чтобы текстовое поле, связанное с complexObject.ID, начало показывать идентификатор.

Я хотел бы сделать это в XAML, если это возможно.

Можно ли это сделать? Если да, то как?

Ответы [ 2 ]

9 голосов
/ 02 декабря 2009

Да, это можно сделать, привязав свойство, которое вы обновляете с желаемым значением. Я бы посоветовал вам взглянуть на шаблон MVVM (Model-View-ViewModel), который действительно полезен для структурирования этого хорошо работающего с WPF. Проверьте это видео для хорошего обзора: MVVM видео

Используя MMVM, вы создадите класс, который будет классом ViewModel. Этот тип обычно устанавливается в DataContext представления. Сделав это, вы можете добавить динамические ссылки на другие свойства класса, например, привязка вашего текстового поля к какому-либо свойству, содержащему идентификатор ComplexObject. Если бы у вашего класса ViewModel было свойство ComplexObject, которое снова имело идентификатор свойства, вы бы просто связали его с объектом следующим образом:

<TextBlock Text="{Binding ComplexObject.ID}" /> 

Имея это, вы можете инициировать создание вашего ComplexObject с помощью щелчка мыши, который в идеале вы должны установить в качестве привязки команды. Также обратите внимание, что класс ViewModel (или тот, кто держит ComplexObject, должен уведомить View, когда объект был установлен. Это можно сделать, сделав ComplexObject DependencyProperty или сделав класс, содержащий свойство, реализующим интерфейс INotifyPropertyChanged, что дает это функция PropertyChanged для запуска измененного события. Я предпочитаю последнее.

2 голосов
/ 02 декабря 2009

Одной из возможностей будет привязка вашего XAML к свойству вашего кода. Получатель этого свойства будет возвращать complexObject.ID, если complexObject! = Null. В противном случае он возвращает что-то «по умолчанию», независимо от того, является ли оно нулевым или 0 или значением по умолчанию ( тип ID ). Точно так же установщик для этого свойства назначит значение для complexObject.ID, если complexObject, опять же, не нуль.

public int ID
{
    get
    {
        if (complexObject != null)
            return complexObject.ID;
        return 0; // or null or some appropriate default
    }
    set
    {
        if (complexObject != null)
            complexObject.ID = value;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...