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% 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
Sie können ein Demo-Projekt mit PushBinding
hier herunterladen, wenn Sie interessiert sind: Ссылка
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.