2012-03-26 4 views
2

У меня есть логическая настройка в моем файле Properties/Settings.settings, который в основном хранит для каждого пользователя режим «Право налево» или «Влево-Вправо».Двусторонняя привязка к пользовательской настройке?

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

Разъяснение

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

Следовательно, мой вопрос ... как настроить двустороннюю привязку к пользовательским настройкам?

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

ответ

1

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

Во-первых, я установил бы флажок на обычной форме и посмотрел, поможет ли это. Какой компонент/библиотеку вы используете для ленты? Вы используете DevExpress? Я знаю, что DevExpress не поддерживает привязку привязки к ленточным элементам управления. Вы используете для этого другие компоненты или свой собственный код?

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

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

+0

Я пошел с опцией CheckedChanged. Благодарю. – KingCronus

+0

Вы говорите, что это работает на вашей машине? Я тестировал это на своей Ultimate Version и не могу заставить это работать без изменений, перечисленных в моем ответе. Насколько я могу читать из документации и других вопросов, это единственный способ. Итак, мне любопытно, как вы это делаете, что работает прямо из коробки? –

+0

Я не работаю «из коробки», обработчик события CheckedChange, который я написал, по сути, просто вызывает метод сохранения в любом случае. Я отказался от первоначальной проблемы на том основании, что у меня было больше времени на исследования, чем просто кодирование обходного пути. Благодарю вас за вашу помощь. – KingCronus

4

ОК, после некоторого копания, кажется, вам нужно будет немного реализовать это, однако это может быть не так чисто, как вы этого хотите. В принципе, ваш объект привязки должен реализовать INotifyPropertyChanged (это часть, которая все время давала мне проблемы ... Я думал, что CheckBox должен реализовать этот интерфейс, но это объект, к которому привязан флажок), что делает Properties.Settings.Default. Таким образом, все, что вам нужно сделать, это следующее

Hook в случае OnPropertyChanged из Property.Settings.Default:

Properties.Settings.Default.PropertyChanged += 
    new PropertyChangedEventHandler(Default_PropertyChanged); 

Тогда, когда любые связанные изменения свойств, просто вызовите метод Save:

void Default_PropertyChanged(object sender, PropertyChangedEventArgs e) 
{ 
    Properties.Settings.Default.Save(); 
} 

В принципе, когда вы связываете объект, он соответствующим образом меняет Settings.Default.[Setting]. Он просто не называет Save по каждому из этих изменений. Вы должны реализовать эту часть вещей.

+0

Я уже вызываю .Save(), но проблема заключается в том, что объект Properties не обновляется, когда я изменяю статус связанного элемента управления. – KingCronus

+0

Я предполагаю, что это так ... nevermind, просто означает загромождение моего кода с помощью дополнительных обработчиков событий. Я уточнил свой первоначальный вопрос, потому что кто-то другой приходит вместе с любыми идеями! Спасибо, в любом случае. – KingCronus

+0

@AdamKing На самом деле, взгляните на эту статью: http://msdn.microsoft.com/en-us/library/0yyxh69h.aspx Кажется, что вы ищете? Я буду обновлять как мой ответ, если это работает, я проверяю ... в противном случае эта статья, похоже, подводит итог вашим вариантам в противном случае: http://www.daniweb.com/software-development/csharp/threads/255512/binding-an- application-setting-to-a-control-property –

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