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%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
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% 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%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%%code% ist lediglich eine Konstante für die DependencyProperty-Klasse.
Sie können so etwas tun:
%Vor%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%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%
istHoffe 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%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% DependencyProperty.UnsetValue
ist lediglich eine Konstante für die DependencyProperty-Klasse.
Sie können so etwas tun:
%Vor%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%Tags und Links wpf c# xaml multibinding