Abrufen von Fenstereigenschaften in ViewModel

8

Ich erstelle eine WPF-Anwendung, bei der ich die Breite, Höhe und Positionen des Fensters aus meinem Ansichtsmodell ermitteln muss. Ich verwende den folgenden XAML:

%Vor%

In meinem Ansichtsmodell funktionieren die Werte für "Oben" und "Links" einwandfrei, aber die Eigenschaften "Breite" und "Höhe" sind beide NaN. Ich habe solche Eigenschaften für jedes der Attribute, an die ich mich gebunden habe:

%Vor%

Irgendeine Idee, warum die Werte NaN zurückkommen? Noch wichtiger: Was kann ich tun, um die Werte zu erhalten, die ich suche?

BEARBEITEN: Mir ist klar, dass das ein bisschen aus ist, aber ich muss einen Screenshot der Anwendung aus dem Ansichtsmodell aufnehmen. Das Ansichtsmodell enthält zusätzliche Eigenschaften, die ich nicht eingefügt habe, aber notwendig sind, um die gewünschte Funktionalität zu implementieren. Für die Neugierigen ist unten meine Methode, den Bildschirm zu erfassen:

%Vor%     
senfo 04.10.2011, 20:22
quelle

2 Antworten

9

Wie mzabsky gesagt hat, müssen Sie ActualWidth und ActualHeight verwenden. Das Problem hier ist, dass sie schreibgeschützt sind und Sie können nicht OneWayToSource Binding für eine schreibgeschützte Dependency-Eigenschaft ausführen.

Es gibt jedoch Problemumgehungen.
Siehe die folgende Frage: Read-only-GUI-Eigenschaften zurück in ViewModel

Mit dem angehängten Verhalten von Kent Boogaart können Sie dies tun

%Vor%

oder Sie können versuchen, die Lösung, die ich dafür gemacht habe, namens PushBinding , die verwendet werden kann, um schreibgeschützte DPs zum Viewmodel zu schieben. In Ihrem Fall würde die Verwendung so aussehen

%Vor%

Sie können ein Demo-Projekt mit PushBinding hier herunterladen, wenn Sie interessiert sind: Ссылка

    
Fredrik Hedblad 04.10.2011, 21:04
quelle
2

Sie sollten ActualWidth und ActualHeight als verbindliche Ziele für einen Weg, um die Bindung zu binden, nicht Höhe und Breite - das sind gewünschte Größe, nicht tatsächliche Größe. Breite und Höhe ist NaN, es sei denn, Sie haben sie speziell auf einen Wert festgelegt.

Natürlich ist eine andere Frage, dass dies nicht die richtige Verwendung des View-Modells ist.

    
Matěj Zábský 04.10.2011 20:27
quelle

Tags und Links