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>
我正在尝试将功能区按钮 属性 IsEnabled 绑定到代码 属性 以便我可以根据特定情况使其对用户可用或不可用。
我不知道我做错了什么,我想不通
目前我有以下代码。
属性 和事件
的 class ViewModelPublic 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>