Справка по связыванию WPF - PullRequest
1 голос
/ 07 августа 2009

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

В идеале, который я разрабатываю, он будет иметь несколько элементов управления (текстовый редактор), каждый из которых будет размещен на вкладке, во многом как VS для каждого исходного файла. Когда пользователь щелкает по новой, "host" создает новое EditorWindow (usercontrol), создает новую вкладку и сообщает вкладке отображать созданное им EditorWindow, а затем обновляет свойство с именем currentWindow (типа EditorWindow) тем, которое это в настоящее время активен. Внутри EditorWindow находится текстовый редактор, имя которого textEditor (также свойство). То, что я пытаюсь сделать, это взять этот код из источника быстрого запуска элемента управления текстового редактора, который я использую

                    <StackPanel>
                        <CheckBox Checked="EditiorOptionsChecked" IsChecked="{Binding ElementName=Control, Path=currentWindow.textEditor.IsIndicatorMarginVisible}" Content="Indicator margin visible" />
                        <CheckBox Checked="EditiorOptionsChecked" IsChecked="{Binding ElementName=Control, Path=currentWindow.textEditor.IsLineNumberMarginVisible}" Content="Line number margin visible" />
                        <CheckBox Checked="EditiorOptionsChecked" IsChecked="{Binding ElementName=Control, Path=currentWindow.textEditor.IsRulerMarginVisible}" Content="Ruler margin visible (useful for fixed-width fonts only)" />
                        <CheckBox Checked="EditiorOptionsChecked" IsChecked="{Binding ElementName=Control, Path=currentWindow.textEditor.IsSelectionMarginVisible}" Content="Selection margin visible" />
                    </StackPanel>

поместите это в управляющие элементы хоста xaml и привяжите флажки к редактору синтаксиса. Я пробовал пару разных вещей безрезультатно. Элемент управления - это имя окна, в котором размещены все вкладки, а путь, очевидно, должен быть свойством, к которому привязаны флажки. Я почти уверен, что проблема в том, что во время выполнения currentWindow не инициализируется, поэтому мои привязки никогда не обновляются, но я не знаю, как решить эту проблему. Спасибо!

Ответы [ 2 ]

1 голос
/ 08 августа 2009

Поскольку вы новичок в WPF, вы можете не знать, что свойства должны реализовывать какие-то уведомления об изменениях, чтобы привязки работали. Например, если какое-либо из свойств в пути «currentWindow.textEditor.IsIndicatorMarginVisible» изменилось, вам необходимо сообщить механизму связывания, что оно изменилось. Если вы реализуете эти свойства как DependencyPropertys, отслеживание изменений происходит бесплатно. В противном случае вы должны реализовать INotifyPropertyChanged.

0 голосов
/ 07 августа 2009

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

...