In MainView habe ich eine Schaltfläche, die einen Befehl aufruft (wir nennen it Execute), gespeichert im MainViewModel. Ich möchte auch, dass dieser Befehl aufgerufen wird, wenn mit der linken Maustaste geklickt wird (eigentlich nur bei Up), aber nur, wenn MouseUpCheckBox aktiviert ist.
Als ich den gesamten Code in der Ansicht hatte, habe ich eine statische Bindung für Execute durchgeführt, dann aber die ElementName-Bindung an das Fenster (mit dem Namen w_window) verwendet. für IsChecked und überprüfte den Eigenschaftswert im MouseLeftButtonUpEvent-Handler.
XAML
Code: Select all
Execute
Execute on Mouse Up
Code: Select all
public MainView()
{
InitializeComponent();
this.CommandBindings.Add(new CommandBinding(Execute, ExecuteExecuted));
MyDesigner.AddHandler(UIElement.MouseLeftButtonUpEvent, new RoutedEventHandler((o, eventArgs) =>
{
if (ExecuteOnMouseUp)
{
Execute.Execute(null, this);
}
}), true);
}
#region ExecuteOnMouseUp
///
/// ExecuteOnMouseUp Dependency Property
///
public static readonly DependencyProperty ExecuteOnMouseUpProperty =
DependencyProperty.Register("ExecuteOnMouseUp", typeof(bool), typeof(MainView),
new FrameworkPropertyMetadata((bool)false));
///
/// Gets or sets the ExecuteOnMouseUp property. This dependency property
/// indicates ....
///
public bool ExecuteOnMouseUp
{
get { return (bool)GetValue(ExecuteOnMouseUpProperty); }
set { SetValue(ExecuteOnMouseUpProperty, value); }
}
#endregion
#region Execute
///
/// The Execute command ....
///
public static RoutedUICommand Execute
= new RoutedUICommand("Execute", "Execute", typeof(MainView));
private void ExecuteExecuted(object sender, ExecutedRoutedEventArgs e)
{
...
}
#endregion