Отобразить сложный пользовательский интерфейс на объект чисто и эффективно - PullRequest
0 голосов
/ 02 декабря 2009

В настоящее время у меня есть приложение (в Silverlight), использующее mv-vm, которое имеет интерфейс для добавления / редактирования / удаления различных записей в базе данных. Хорошей аналогией была бы страница для заказа автомобиля со множеством флажков и комбинированных списков для любых функций, которые вы хотели, чтобы автомобиль включал.

Мое приложение имеет множество таких элементов пользовательского интерфейса (даже в том числе TreeViews с TreeViewItemCheckBox'es), которые я хочу сопоставить с объектом данных, использующим словарь для хранения любых включенных параметров.

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

<TreeView>
   <TreeViewItem>
      <TreeViewItem.Header>
          <TreeViewItemCheckBox Content="All Features" IsChecked="{Binding AllFeaturesChecked}"/>
      </TreeViewItem.Header>
      <TreeViewItemCheckBox Content="Feature1" IsChecked="{Binding Feature1Checked}"/>
      <TreeViewItemCheckBox Content="Feature2" IsChecked="{Binding Feature2Checked}"/>
      <TreeViewItemCheckBox Content="Feature3" IsChecked="{Binding Feature3Checked}"/>
      <TreeViewItemCheckBox Content="Feature4" IsChecked="{Binding Feature4Checked}"/>
  </TreeViewItem>
</TreeView>

... умножьте на 10, и вы получите идею.

Кто-нибудь может придумать лучший способ сделать это?

Спасибо!

1 Ответ

1 голос
/ 03 декабря 2009

Почему бы вашим ViewModels не отвечать за эту логику? Вызывает необходимость сделать его очень универсальным, но вы всегда будете сталкиваться с некоторым сложным пользовательским интерфейсом, который не совсем уместен в словаре. Много крайних случаев. Я бы предложил это:

public class BaseViewModel : ViewModel //Your basic viewmodel with INPC, etc
{
    public virtual void LoadModel(DictionaryTypeThing model) {}
    public virtual DictionaryTypeThing GetModel() {}
}

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

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