Ausblenden Flyout auf die Schaltfläche klicken (DelegateCommand)
Ich bin erstellen einer Windows Store-app, und ich habe ein flyout-Menü, das wie folgt aussieht:
Den Flyout
richtig funktioniert, und ich bin in der Lage, eine neue Adresse hinzufügen, wenn ich auf den "Hinzufügen" -Button
. Das problem ist, ich möchte in der Lage sein zu verstecken Flyout
als gut. Meine DelegateCommand
ist in der ViewModel
, so habe ich nicht einen Verweis auf die eigentliche View
Elemente.
Ich habe versucht, die änderung der DelegateCommand
zu nehmen, einen parameter, etwa so:
public DelegateCommand<object> AddAddressCommand
{
get { return new DelegateCommand<object>(AddAddress, CanAddAddress); }
}
public void AddAddress(object parameter)
{
if (_isEditing)
{
NewAddress.PayeeId = CurrentPayee.Id;
_addressRepository.InsertAsync(NewAddress);
}
CurrentPayee.Addresses.Add(NewAddress);
NewAddress = new Address();
//TODO: hide Flyout
}
Und in meinem XAML, ich versuche zum bestehen einer CommandParameter
zu den DelegateCommand
etwa so:
<Button Content="Add"
Command="{Binding AddAddressCommand}"
CommandParameter="{Binding RelativeSource={RelativeSource Self}}"
HorizontalAlignment="Center" />
Wenn ich pass {RelativeSource Self}
erhalte ich einen Verweis auf die Button
wie erwartet, aber ich habe nicht in der Lage zu verweisen, etwas anderes auf den Baum. Die "Hinzufügen" - Button
ist ein Kind der Flyout
, die verbunden ist, um die "Adresse Hinzufügen" AppBarButton
.
Ideal, ich könnte passieren in einem Verweis auf die Flyout
direkt, oder die AppBarButton
, so dass ich anrufen kann Flyout.Hide()
wenn ich auf die Schaltfläche "Hinzufügen"`.
Ich habe versucht Einstellung der x:Name
des AppBarButton
und die Flyout
und referenzieren Sie diese in der CommandParameter
etwa so:
CommandParameter="{Binding ElementName=AddAddressFlyout}"
und in beiden Fällen, mein parameter ist null
. Ist es möglich, dies zu erreichen, mit gerade Datenbindung, oder werde ich hinzufügen, eine Art von Behavior
s?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Finden Sie vielleicht dieser Artikel interessant, es zeigt, wie mithilfe einer Abhängigkeitseigenschaft zu kontrollieren, wenn das Fliegen aus geöffnet oder geschlossen ist. Sie können dann binden die Abhängigkeit Eigenschaft einer Eigenschaft auf Ihrem view-Modell: https://marcominerva.wordpress.com/2013/07/30/using-windows-8-1-flyout-xaml-control-with-mvvm/
Ich habe eigentlich nur versucht, es in meinem eigenen app und es funktioniert einwandfrei.
Flyout
oderAppBarButton
wenn möglich, als ich versuchte in der ursprünglichen Frage, aber es scheint, dass ich werde wahrscheinlich auch an die dependency property route. Froh zu hören, dass es bei Ihnen funktioniert hat, wie es scheint, es sollte den trick tun!View
. Ich es vorstellen sollte, denn mehr als ein nicht sichtbar, zu einer Zeit,...Vielleicht fehlt mir eine Feinheit in deine Anforderungen, aber ich war in der Lage, in der Nähe ein flyout-Menü ganz einfach mit x:Name und .Hide()
use x:Name="MyFlyout" in Ihrem
<Flyout>
tag und schließen Sie es dann in Ihrem C# - klicken Sie auf Ereignis-by-doing-MyFlyout.Hide()XAML-CODE:
C# - CODE
Flyout
Methode für diese, aber ich habe versucht zu vermeiden, mit code-behind in der Zeit, in kleben mit dem MVVM-Muster.Schlage ich vor, mit AttachableProperties. Ich schicke zwei, die ich geschrieben habe, dass sind einfach zu verwenden und dieses Ziel zu erreichen. Der erste misst die Flyout-und verweist auf eine Schaltfläche. Wenn auf die Schaltfläche geklickt wird, schließt es die Flyout.
Die Sekunde misst, um die Schaltfläche und auf die Flyout (nützlich, wenn Sie die Tasten in der Flyout-sind Teil einer Daten-Vorlage). Der gleiche Effekt tritt nur in diesem Fall können Sie mehrere buttons, schließen Sie das flyout-Menü, wenn Sie gedrückt werden.
Zuerst habe ich die benutzerdefinierte Erweiterung Methode in meinem Projekt, welches ich in dem Beispiel:
Dann die haftenden Eigenschaften...
Haftenden Eigenschaften
In der Ansicht
ODER