Binden Sie an eine CheckBox und führen Sie einen Befehl auf MVVM-Art ausC#

Ein Treffpunkt für C#-Programmierer
Guest
 Binden Sie an eine CheckBox und führen Sie einen Befehl auf MVVM-Art aus

Post by Guest »

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

Code: Select all

Execute


Execute on Mouse Up

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?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post