Свойства WPF ReadOnly Зависимости с помощью MVVM

Один хороший способ сделать это через приспособления, особенно эти initial_data приспособления.

приспособление А является набором файлов, которые содержат сериализированное содержание базы данных. Таким образом, это похоже на наличие резервного копирования базы данных, но поскольку это - что-то, о чем Django знает, это легче использовать и будет обладать дополнительными преимуществами, когда Вы приезжаете, чтобы сделать вещи как поблочное тестирование.

можно создать приспособление из данных в настоящее время в DB с помощью django-admin.py dumpdata. По умолчанию данные находятся в формате JSON, но другие опции, такие как XML доступны. Хорошее место к оборудованию магазина fixtures подкаталог Ваших каталогов приложения.

можно загрузить fixure использование django-admin.py loaddata, но более значительно, если приспособление имеет имя как initial_data.json, это будет автоматически загружено, когда Вы сделаете syncdb, избавляя от необходимости импортировать его сами.

Другое преимущество - то, что, когда Вы работаете manage.py test для выполнения Модульных тестов, временной тестовой базе данных также загрузят Приспособление Исходных данных.

, Конечно, это будет работать когда, когда Вы добавите атрибуты к моделям и столбцам к DB. При отбрасывании столбца от Базы данных, необходимо будет обновить приспособление для удаления данных для того столбца, который не мог бы быть простым.

Это работает лучше всего при выполнении большого количества небольших изменений базы данных во время разработки. Для обновления производственного DBS вручную сгенерированный сценарий SQL может часто работать лучше всего.

7
задан Andy Clarke 17 November 2009 в 14:26
поделиться

2 ответа

You » повторная попытка установить свойство SelectedObject в XAML. Если это' s только для чтения, как его установить?

Edit: извините, моя ошибка. Просто понял, что пытаешься сделать, и ты прав, что это должно работать. Однако WPF не поддерживает этот сценарий, по крайней мере, в версии 3.5.

Редактировать 2: Только что проверил в .NET 4 и та же история.

Кстати, если вы застряли с чужим DP, доступным только для чтения, вы пытаетесь "протолкнуть" виртуальную машину, вы можете использовать прикрепленное поведение, чтобы обойти это. Например, предположим, что вы хотите, чтобы ваша виртуальная машина знала о свойствах ActualWidth и ActualHeight вашего представления. Вы можете написать SizeWatcherBehavior , который присоединяется к FrameworkElement и отслеживает изменения размера. При обнаружении эти изменения размера передаются для чтения / записи вложенных свойств, к которым ваша виртуальная машина может привязать:

<Grid local:SizeWatcherBehavior.Watch="True"
    local:SizeWatcherBehavior.Width="{Binding WidthOnVM, Mode=OneWayToSource}"
    local:SizeWatcherBehavior.Height="{Binding HeightOnVM, Mode=OneWayToSource}"/>
4
ответ дан 7 December 2019 в 05:24
поделиться

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

Конечно, мы не делали этот DP для чтения-записи.

Использование прикрепленных свойств / поведения для таких сценариев - это огромные накладные расходы. Самый простой обходной путь - обработать событие «SelectedObjectChanged» в исходном коде и установить свойство, которое вы хотите привязать к DP «SelectedObject» в исходном коде.

По нашему мнению, подход «обрабатывать событие и вызывать код из VM / DataContext напрямую» никоим образом не нарушает работу MVVM, поскольку ViewModel по-прежнему ничего не знает о View.

0
ответ дан 7 December 2019 в 05:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: