WPF-MultiBinding in Convert schlägt fehl == DependencyProperty.UnsetValue

8

Mein Code schlägt beim Start fehl, weil das Array Werte in Converter , das von Multibinding aufgerufen wird, nicht mit dem richtigen Wert gefüllt ist, sondern einen Wert von DependencyProperty.UnsetValue hat.

Schauen Sie sich Convertor an und sehen Sie auch, wo ich Fehler erhalte

%Vor%

Sie können vollständigen Code herunterladen oder mein Code-Snippet als sehen pro unten.

MainWindow.xaml

%Vor%

MainWindow.xaml.cs

%Vor%

Und das sind ViewModel-Klassen.

PageViewModel.cs

%Vor%

PageNumberViewModel.cs

%Vor%     
Aryan SuryaWansi 22.07.2011, 06:57
quelle

5 Antworten

7

Wenn Sie eine Liste in einer ItemsSource festlegen, wird der DataContext der DataTemplate für die einzelnen Elemente für jeden Eintrag der Liste verwendet.

Wahr, dass Ihre TextBlock-Bindung ordnungsgemäß funktioniert, weil der DataContext auf Ihr Hauptobjekt gesetzt ist: PageViewModel

Aber in Ihrer DataTemplate wird der DataContext auf PageNumberViewModel gesetzt, da dies die Elemente in Ihrer Sammlung sind.

Daher wird die Bindung an Path=CurrentPage.Page_Number zu UnsetValue führen, da CurrentPage keine Eigenschaft von PageNumberViewModel

ist

Hoffe das klärt die Dinge!

Wenn Sie wirklich an die CurrentPage-Eigenschaft des DataContext Ihres Windows binden möchten, sollten Sie eine ElementName-Bindung verwenden:

Geben Sie dem Fenster einen Namen, binden Sie es an

%Vor%

oder verwenden Sie eine RelativeSource-Bindung:

%Vor%     
Arcturus 22.07.2011, 08:21
quelle
6
___ qstntxt ___

Mein Code schlägt beim Start fehl, weil das Array Werte in CurrentPage.Page_Number , das von ButtonColorConverter aufgerufen wird, nicht mit dem richtigen Wert gefüllt ist, sondern einen Wert von %code% hat.

Schauen Sie sich Convertor an und sehen Sie auch, wo ich Fehler erhalte

%Vor%

Sie können vollständigen Code herunterladen oder mein Code-Snippet als sehen pro unten.

MainWindow.xaml

%Vor%

MainWindow.xaml.cs

%Vor%

Und das sind ViewModel-Klassen.

PageViewModel.cs

%Vor%

PageNumberViewModel.cs

%Vor%     
___ answer13955336 ___

Ich bin auch auf dieses Problem gestoßen und habe in einem anderen Beitrag ( Ссылка ) eine Lösung gefunden. Der Schlüssel ist, die Eigenschaft FallbackValue="" wie folgt zu verwenden:

%Vor%     
___ answer26903686 ___

%code% ist lediglich eine Konstante für die DependencyProperty-Klasse.

Sie können so etwas tun:

%Vor%     
___ answer6787545 ___

Ich habe gerade in MainWindow.xaml nach Mr.Arcturus Vorschlag geändert und es funktioniert gut.

Vielen Dank Mr.Arcturus.

Sie können ManiWindow.xaml nach der Änderung sehen

%Vor%     
___ tag123c ___ C # (sprich "Cis") ist eine objektorientierte Programmiersprache auf hohem Niveau, die für die Erstellung einer Vielzahl von Anwendungen entwickelt wurde, die auf dem .NET Framework (oder .NET Core) ausgeführt werden. C # ist einfach, leistungsfähig, typsicher und objektorientiert. ___ tag123wpf ___ Windows Presentation Foundation oder WPF ist ein Subsystem zum Rendern von Benutzeroberflächen in Windows-basierten Anwendungen. ___ tag123xaml ___ Die Extensible Application Markup Language (XAML) ist eine deklarative XML-basierte Sprache, die zum Initialisieren strukturierter Werte und Objekte in verschiedenen Frameworks verwendet wird. Wenn eine Frage über die Verwendung von XAML mit einem bestimmten Framework ist, sollte auch ein Tag für das Framework bereitgestellt werden, z. [wpf] (Windows Presentation Foundation), [Silverlight], [Windows-Phone], [Windows-Store-Apps] (Windows 8 Store-Apps), [win-universal-app], [xamarin.forms] oder [workflow- Stiftung] ___ tag123multibinding ___ MultiBinding ist ein XAML-Tag in Microsoft .NET WPF, mit dem Sie mehrere Datenquellen in einer einzigen Sammlung von Daten kombinieren können, die für die Datenbindung verfügbar sind. ___ qstnhdr ___ WPF-MultiBinding in Convert schlägt fehl == DependencyProperty.UnsetValue ___ answer6787358 ___

Wenn Sie eine Liste in einer ItemsSource festlegen, wird der DataContext der DataTemplate für die einzelnen Elemente für jeden Eintrag der Liste verwendet.

Wahr, dass Ihre TextBlock-Bindung ordnungsgemäß funktioniert, weil der DataContext auf Ihr Hauptobjekt gesetzt ist: %code%

Aber in Ihrer DataTemplate wird der DataContext auf %code% gesetzt, da dies die Elemente in Ihrer Sammlung sind.

Daher wird die Bindung an %code% zu UnsetValue führen, da CurrentPage keine Eigenschaft von %code%

ist

Hoffe das klärt die Dinge!

Wenn Sie wirklich an die CurrentPage-Eigenschaft des DataContext Ihres Windows binden möchten, sollten Sie eine ElementName-Bindung verwenden:

Geben Sie dem Fenster einen Namen, binden Sie es an

%Vor%

oder verwenden Sie eine RelativeSource-Bindung:

%Vor%     
___
ColinE 22.07.2011 07:24
quelle
5

Ich bin auch auf dieses Problem gestoßen und habe in einem anderen Beitrag ( Ссылка ) eine Lösung gefunden. Der Schlüssel ist, die Eigenschaft FallbackValue="" wie folgt zu verwenden:

%Vor%     
user500099 19.12.2012 15:12
quelle
5

DependencyProperty.UnsetValue ist lediglich eine Konstante für die DependencyProperty-Klasse.

Sie können so etwas tun:

%Vor%     
Simon_Weaver 13.11.2014 07:42
quelle
0

Ich habe gerade in MainWindow.xaml nach Mr.Arcturus Vorschlag geändert und es funktioniert gut.

Vielen Dank Mr.Arcturus.

Sie können ManiWindow.xaml nach der Änderung sehen

%Vor%     
Aryan SuryaWansi 22.07.2011 08:38
quelle

Tags und Links