2013-10-04 3 views
1

Этот вопрос довольно сложный для слова, поэтому, пожалуйста, спросите, не хватает ли моего объяснения.WPF глобальные переменные?

У меня есть приложение, которое имеет несколько datagrids которые содержат editable objects, например контейнеров, поставок и пакетов.

Теперь каждый из этих объектов (отгрузки, контейнера, пакета и т.д.) часто требуется знание выбранного элемента в другом datagrid (например, пакете должен знать, что контейнера выбран в containserviewmodel) обычно я запускаю событие, когда selectedItem изменяет и прослушивает эти события на viewmodels, которые требуют этой информации, однако в последнее время были внесены изменения, которые требуют models, чтобы узнать о sel отражения.

Так что мой вопрос: было бы это «плохой практикой» или «плохой код», чтобы иметь один класс, который содержит все выбранные элементы из всех viewmodels, и просто слушать events в этом одном классе, который затем используется по viewmodels и модели, чтобы узнать о выбранных товарах? (С использованием IoC.get<>, чтобы получить экземпляр «глобального» класса)

+0

опубликуйте соответствующий код и XAML. –

+0

Это ужасно много кода и xaml, есть ли определенная часть, которую вам нужно увидеть? – Ben

ответ

3

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

Что я могу сделать в вашей ситуации, есть модель родительского представления, которая содержит все коллекции и свойства для привязки к выбранным элементам из каждой коллекции. Таким образом, вы можете заниматься всем в одном месте. Представления для детей могут напрямую связываться с моделью родительского представления, если это поможет:

<DataGrid ItemsSource="{Binding DataContext.Shipments, RelativeSource={ 
    RelativeSource AncestorType={x:Type Views:ParentView}}}" /> 
+0

, который кажется хорошим решением, я немного беспокоился о добавлении функциональности к своим объектам данных, но они обрабатывают функции enditit, которые в моем datagrid требуют дополнительных данных, которые недоступны для этого объекта данных (например, выбранного контейнера), чтобы сохранить (который обрабатывается другим классом, в котором я решил связать выбранный контейнер и добавить информацию непосредственно перед сохранением. Однако ваше решение, безусловно, звучит намного чище вообще, и я могу переключить свою систему событий в этот стиль. – Ben

Смежные вопросы