by Guest » 07 Jan 2025, 04:03
Ich habe eine ähnliche Frage wie diese, jedoch in einer detaillierteren Situation. Ich versuche auch, die Lösung mithilfe des Model View Viewmodel-Musters zu implementieren.
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
C#
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
Wie kann ich diesen Code aus meiner Ansicht in das Ansichtsmodell portieren? Soll ich ein angeschlossenes Grundstück nutzen? Gibt es eine Möglichkeit, den Kontrollkästchenwert an einen Parameter im Command oder vielleicht im CanExecute-Handler zu binden? Wie geht WPF/MVVM idiomatisch mit einer solchen Situation um?
Ich habe eine ähnliche Frage wie diese, jedoch in einer detaillierteren Situation. Ich versuche auch, die Lösung mithilfe des Model View Viewmodel-Musters zu implementieren.
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.
[b]XAML[/b]
[code]
Execute
Execute on Mouse Up
[/code]
[b]C#[/b]
[code]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
[/code]
Wie kann ich diesen Code aus meiner Ansicht in das Ansichtsmodell portieren? Soll ich ein angeschlossenes Grundstück nutzen? Gibt es eine Möglichkeit, den Kontrollkästchenwert an einen Parameter im Command oder vielleicht im CanExecute-Handler zu binden? Wie geht WPF/MVVM idiomatisch mit einer solchen Situation um?