Как привязать данные к ViewModel в Expression Blend? - PullRequest
2 голосов
/ 01 октября 2009

В WPF и Silverlight вы можете создать объект модели представления и установить его в DataContext элемента управления при его создании во время выполнения. Затем вы можете привязать свойства визуального объекта к свойствам в вашем DataContext.

Один из способов установить привязку - ввести привязку непосредственно в тег:

<TextBox Text="{Binding Path=Description}"/>

И это свяжет текстовое поле со свойством Description в модели представления.

Проблема с набором текста в привязке заключается в том, что вы можете совершить ошибку при печати. (И вы почти наверняка совершите ошибку, если у вас будут сотни привязок.)

В Expression Blend есть небольшая белая точка рядом со свойством Text в окне Properties. Это вызывает меню, из которого вы можете создать привязку данных.

  • Как мне отобразить свойства модели представления в диалоговом окне "Создать привязку данных", чтобы я мог их выбрать.
  • Будет ли конфигурация привязки данных в Blend мешать установке моей модели представления в DataContext во время выполнения?

Ответы [ 3 ]

1 голос
/ 01 октября 2009

Я экспериментировал с Blend, чтобы найти подход перетаскивания к привязке данных, который по-прежнему позволяет легко переопределять модель представления в коде.

  • Сначала создайте объект модели представления, который реализует INotifyPropertyChanged и вызывает событие notify в установщиках. Модели представлений могут быть иерархическими. Например, у вас может быть ObservableCollection в вашей модели основного вида.
  • В Blend откройте свою страницу или элемент управления и перейдите на вкладку данных.
  • Справа откройте меню под значком «Добавить источник данных в реальном времени».
  • Выбор "Определить новый источник данных объекта"
  • Выберите класс модели представления верхнего уровня и подтвердите диалоговое окно

В своих экспериментах я обнаружил, что важно связать источник данных с тем местом, где я его хотел сначала, иначе Blend мог бы создать неоптимальную конфигурацию, если я сначала не сделал следующий шаг.

  • Открыть окно объектов и шкалы времени в Blend
  • Выберите корневой объект, например, UserControl
  • Откройте Свойства и убедитесь, что выбран корневой объект
  • Найдите DataContext и щелкните квадрат, чтобы открыть меню, и выберите DataBinding
  • Выберите источник данных, который был только что создан ранее

Теперь, когда источник данных создан, привязка данных очень проста.

  • поставить некоторые элементы управления на странице
  • открыть окно данных
  • из источника данных для модели представления перетащите свойства в элементы управления, чтобы создать привязки или установить привязку из окна «Свойства».

Теперь вы можете создать объект модели в реальном времени в конструкторе элемента управления

public MainPage()
    {
        // Required to initialize variables
        InitializeComponent();
        mVm = new MyViewModel();
        this.DataContext = mVm;
    }
    private MyViewModel mVm;

Добавьте любую инициализацию для получения данных, и вы готовы к работе.

1 голос
/ 02 октября 2009

У меня есть снимок экрана в моем блоге Смешиваемый MVVM: Введение и привязка данных , который показывает настройку для Siverlight.

По сути, вы создаете ViewModel как DataContext из UserControl с помощью «Инициализатора нового объекта», а затем с помощью вкладки «Явный контекст данных» диалога «Привязка» для самих элементов управления.

Надеюсь, это поможет.

1 голос
/ 01 октября 2009

Один из способов - включить виртуальную машину в качестве ресурса на ваш взгляд:

<UserControl>
    <UserControl.Resources>
        <local:YourViewModel x:Key="ViewModel"/>
    </UserControl.Resources>
</UserControl>

Затем вы можете ссылаться на это как DataContext="{StaticResource ViewModel}" в другом месте.

Не могу сказать, что мне это нравится, но я не могу сказать, что мне нравятся какие-то особые взгляды, которые Blend навязывает вашему дизайну.

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