WPF按钮属性绑定到代码

时间:2015-05-19 12:06:03

标签: wpf vb.net xaml wpf-controls

我正在尝试将功能区按钮属性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,但它会反映回用户界面。

1 个答案:

答案 0 :(得分:0)

您的财产的名称与您在通知中报告的财产的名称不同。

该属性的名称为btnStartVM,但您报告的是btnStart。将呼叫更改为:

NotifyPropertyChanged("btnStartVM")

此外,绑定看起来非常不合适。您应该删除, ElementName=btnStart部分。

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

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