我正在尝试将功能区按钮属性IsEnabled绑定到代码属性,以便我可以根据特定情况将其提供给用户。
我不知道我做错了什么,我无法弄清楚
目前我有以下代码。
属性和事件的类ViewModel
Public Class ViewModel
Implements INotifyPropertyChanged
Private _btnStart As Boolean
Public Property btnStartVM() As Boolean
Get
Return _btnStart
End Get
Set(ByVal value As Boolean)
_btnStart = value
NotifyPropertyChanged("btnStartVM")
End Set
End Property
Public Event PropertyChanged As PropertyChangedEventHandler _
Implements INotifyPropertyChanged.PropertyChanged
Public Sub NotifyPropertyChanged(ByVal propertyName As String)
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propertyName))
End Sub
结束班
xaml上的按钮声明
<RibbonButton x:Name="btnStart" Style="{StaticResource btnTriggers}" SmallImageSource="Images/start.ico" Label="Start"/>
和风格
<Style x:Key="btnTriggers" TargetType="{x:Type RibbonButton}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=btnStartVM , ElementName=btnStart}" Value="True">
<Setter Property="IsEnabled" Value="True"/>
</DataTrigger>
<DataTrigger Binding="{Binding Path=btnStartVM, ElementName=btnStart}" Value="False">
<Setter Property="IsEnabled" Value="False"/>
</DataTrigger>
</Style.Triggers>
</Style>
Public Sub Window_Loaded(ByVal sender As System.Object, ByVal e As RoutedEventArgs) Handles MyBase.Loaded
InitializeComponent()
DataContext = New ViewModel()
DataContext.btnStartVM = True
End Sub
DataContext.btnStartVM = True
完成工作并触发NotifyPropertyChanged
,但它会反映回用户界面。
答案 0 :(得分:0)
您的财产的名称与您在通知中报告的财产的名称不同。
该属性的名称为btnStartVM
,但您报告的是btnStart
。将呼叫更改为:
NotifyPropertyChanged("btnStartVM")
此外,绑定看起来非常不合适。您应该删除, ElementName=btnStart
部分。
最后,您不需要在此处使用触发器。以下样式也应该起作用:
<Style x:Key="btnTriggers" TargetType="{x:Type RibbonButton}">
<Setter Property="IsEnabled" Value="{Binding btnStartVM}" />
</Style>