WPF 按钮 属性 绑定到代码

WPF button property binding to code

我正在尝试将功能区按钮 属性 IsEnabled 绑定到代码 属性 以便我可以根据特定情况使其对用户可用或不可用。

我不知道我做错了什么,我想不通

目前我有以下代码。

属性 和事件

的 class 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

结束Class

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 但它不会反映回 UI。

您的 属性 与您在通知中报告的 属性 的名称不同。

属性 名为 btnStartVM,但您正在报告 btnStart。将调用更改为:

NotifyPropertyChanged("btnStartVM")

此外,绑定看起来很不对劲。您可能应该删除 , ElementName=btnStart 部分。

最后,您不需要在此处使用触发器。以下样式应该也能正常工作:

<Style x:Key="btnTriggers" TargetType="{x:Type RibbonButton}">
  <Setter Property="IsEnabled" Value="{Binding btnStartVM}" />
</Style>