У меня есть приложение WPF VB.NET, которое работает в двух разных режимах (режим разработки и режим оценки соответственно). Я добавил пункт меню и кнопку переключения, чтобы пользователь мог выбрать, какой режим он/она использует с легкостью. Конечно, все приложение действует по-разному в зависимости от того, находится ли он в режиме разработки или нет, поэтому имеет смысл создать логический уровень класса, представляющий работу в режиме проектирования, и привязать к ним эти свойства IsChecked
.Привязать булевский уровень класса к объекту WPF «IsChecked»
Сначала я пытался добавить привязку в коде-позади, как это:
Class MainWindow
Private IsInDesignMode As Boolean = True
Private Sub Window_Loaded(sender as Object, e as RoutedEventArgs)
SetUpDataBindings()
End Sub
Private Sub SetUpDataBindings()
tglDesignMode.IsChecked = New Binding(IsInDesignMode)
mnuDesignMode.IsChecked = New Binding(IsInDesignMode)
End Sub
End Class
Затем я прочитал, что элементы управления могут быть связаны только со свойствами, и все примеры, которые я прочитал показал общественности свойства, поэтому я изменил линию 2 выше следующим образом:
Public Property IsInDesignMode as Boolean = True
Но в обоих этих случаях кнопка меню и не были проверены при запуске, и не остаются выданными/бесконтрольно вместе. Поэтому я попробовал другую стратегию, используя XAML:
<ToggleButton Name="tbnDesignMode"
IsChecked="{Binding IsInDesignMode}">
DESIGN MODE
</ToggleButton>
Это тоже не сработало. Я сделал больше исследований и нашел некоторых людей, использующих ElementName
и Path
в своем XAML. Поэтому я пробовал следующее:
<MenuItem Name="mnuDesignMode"
Header="_Design Mode"
IsCheckable="True"
IsChecked="{Binding ElementName=mnuDesignMode, Path=IsInDesignMode}"/>
Это тоже не сработало. Я также видел, как некоторые люди использовали пользовательские конвертеры, но они мало объясняли, что делает конвертер (конвертация с C# на VB там тоже не помогла).
Короче говоря, может кто-то, пожалуйста, помогите мне настроить привязку свойств этих элементов управления к логическим уровням класса и объяснить, почему и как на этом пути?
Спасибо за помощь. Я снова посмотрел на реализацию MVVM и узнал больше об этом методах. В этом контексте данные, связывающие эти свойства, имеют больший смысл. –
Я начал читать ваш код еще больше, так что я мог бы реализовать его где-то еще, и у меня еще два вопроса. 1 - Каков синтаксис для 'RelativeSource' в XAML? 2 - Я предполагаю, что код для создания нового события - это то, что окно может обновлять его содержимое при изменении свойства; это правильно, хотя в окне нет кода в XAML или VB, который делает это? –
Предлагаю вам перейти через Data Binding в WPF, который ответит на все ваши вопросы. https://msdn.microsoft.com/en-us/library/ms750612(v=vs.110).aspx. –