[英]Binding Events to Commands without Blend SDK or third party. (WPF / MVVM)
沒有 System.Windows.Interactivity
或任何其他第三方庫,是否可以將事件綁定到命令?
到目前為止,我已經嘗試了以下方法:
<Style TargetType="DataGridRow">
<EventSetter Event="MouseDoubleClick"
Handler="{Binding DoubleClickCommand}" />
</Style>
和
<DataGrid.InputBindings>
<MouseBinding Gesture="LeftDoubleClick" Command="{Binding DoubleClickCommand}"/>
</DataGrid.InputBindings>
和
<DataGrid ItemsSource="{Binding Model.SpectrumCollections}"
ColumnWidth="*"
AutoGenerateColumns="false"
IsReadOnly="True"
BorderThickness="0"
HeadersVisibility="Column" MouseDoubleClick="{Binding DoubleClickCommand}">
但似乎沒有任何效果,任何幫助將不勝感激。
編輯1:這是我使用的RelayCommand的實現,可能是問題所在。
public class RelayCommand : ICommand
{
private readonly Func<bool> _canExecute;
private readonly Action _execute;
public RelayCommand(Action inExecute, Func<bool> inCanExecute = null)
{
_execute = inExecute ?? throw new Helper.Exceptions.DelegateCommandException(
Exceptions.InExecuteIsNullException);
_canExecute = inCanExecute;
}
public event EventHandler CanExecuteChanged
{
add => CommandManager.RequerySuggested += value;
remove => CommandManager.RequerySuggested -= value;
}
public bool CanExecute(object inObject) => _canExecute?.Invoke() ?? true;
public void Execute(object inObject) => _execute?.Invoke();
}
您不能執行以下操作,因為MouseDoubleClick
是事件而不是依賴項屬性:
MouseDoubleClick="{Binding DoubleClickCommand}">
您可以通過以下方式綁定到MouseBinding
的Command
屬性:
<DataGrid.InputBindings>
<MouseBinding Gesture="LeftDoubleClick" Command="{Binding DoubleClickCommand}"/>
</DataGrid.InputBindings>
如果要在雙擊單元格時調用該命令,則應將MouseBinding
添加到DataGridCell
:
<DataGrid x:Name="dg" AutoGenerateColumns="False">
<DataGrid.CellStyle>
<Style TargetType="DataGridCell">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridCell}">
<Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True">
<ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}">
<ContentPresenter.InputBindings>
<MouseBinding Gesture="LeftDoubleClick"
Command="{Binding DataContext.DoubleClickCommand,RelativeSource={RelativeSource AncestorType=DataGrid}}"/>
</ContentPresenter.InputBindings>
</ContentPresenter>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</DataGrid.CellStyle>
<DataGrid.InputBindings>
<MouseBinding Gesture="LeftDoubleClick" Command="{Binding DoubleClickCommand}"/>
</DataGrid.InputBindings>
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Name}" />
</DataGrid.Columns>
</DataGrid>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.