2010-01-27 15 views
8

Ich erstelle ein Benutzersteuerelement, um einen dreimonatigen Kalender anzuzeigen. Das Steuerelement basiert auf dem WPF-Kalendersteuerelement (WPF Toolkit 2009-06), und ich möchte mehrere Eigenschaften des Kalenders durch entsprechende Eigenschaften meines Benutzersteuerelements übergeben. Die Benutzersteuerungseigenschaften sind als Abhängigkeitseigenschaften eingerichtet und ihre zugrunde liegenden Typen entsprechen den Typen der Kalendereigenschaften. Hier ist mein Markup:WPF: Auflistungsabhängigkeitseigenschaft "ist schreibgeschützt und kann nicht aus Markup festgelegt werden"

<StackPanel> 
    <toolkit:Calendar Name="MasterCalendar" 
     SelectionMode="{Binding Path=SelectionMode, Mode=OneWay}" 
     SelectedDate="{Binding Path=SelectedDate, Mode=OneWayToSource}" 
     SelectedDates="{Binding Path=SelectedDates, Mode=OneWayToSource}"/> 
    <toolkit:Calendar Name="SlaveCalendar1" 
     DisplayDate="{Binding DisplayDate, Converter={StaticResource IncrementalMonthConverter}, ElementName=MasterCalendar, Mode=OneWay}" 
     SelectionMode="{Binding Path=SelectionMode, Mode=OneWay}" 
     SelectedDate="{Binding Path=SelectedDate, Mode=OneWayToSource}" 
     SelectedDates="{Binding Path=SelectedDates, Mode=OneWayToSource}"/> 
    <toolkit:Calendar Name="SlaveCalendar2" 
     DisplayDate="{Binding DisplayDate, Converter={StaticResource IncrementalMonthConverter}, ElementName=SlaveCalendar1, Mode=OneWay}" 
     SelectionMode="{Binding Path=SelectionMode, Mode=OneWay}" 
     SelectedDate="{Binding Path=SelectedDate, Mode=OneWayToSource}" 
     SelectedDates="{Binding Path=SelectedDates, Mode=OneWayToSource}"/> 
</StackPanel> 

Alle Eigenschaften problemlos binden, mit Ausnahme der SelectedDates Eigenschaft. Ich erhalte den folgenden Fehler bei der Bindung:

'SelectedDates' Eigenschaft ist schreibgeschützt und kann nicht aus Markup festgelegt werden.

Ich vermute, dass es ist, weil die SelectedDates Eigenschaft eine Sammlung ist, aber ich bin mir nicht sicher, wie Sie das Problem beheben. Kann mir jemand die Ursache des Problems erklären und eine Lösung vorschlagen? Danke für Ihre Hilfe.

Antwort

2

Wenn ich Sie gut verstehe, haben Sie Dependency-Eigenschaften in Ihrem Code hinter dieser Übereinstimmung im Namen und geben Sie die Eigenschaften der Kalendersteuerelemente in Ihrem Benutzersteuerelement ein. Sie versuchen, die SelectedDates-Auflistung der verschiedenen Kalendersteuerelemente der Dependency-Eigenschaft des gleichen Namens in Ihrem Code hinter zuweisen.

Sie können einfach das tun, indem eine Codezeile:

this.SelectedDates=SlaveCalendar1.SelectedDates

In einem geeigneten Eventhandler, der ausgelöst wird, wenn ein gewähltes Datum hinzugefügt wird.

Auch wenn Sie die Bindung auf OneWayToSource setzen, ist das SelectedDates= Stück Code eine Zuweisung. Da die SelectedDates-Eigenschaft keinen Setter hat, ist es nicht möglich, diesen Code zu schreiben.

Here Sie einen Link zum Kalender-Steuerelement in der Dokumentation

+0

Hier zu finden ist, wo ich bin verwirrt: Wenn ich den Wert von bin vorbei, sagen sie, SlaveCalendar1 meine Benutzersteuer Eigenschaft, ich bin nur SlaveCalendar1.SelectedDates zu lesen; Ich schreibe in MyUserControl.SelectedDates, die ich mit einem Setter definiert habe. Mit anderen Worten, MyUserControl.SelectedDates ist nicht schreibgeschützt, und darum schreibe ich. Warum funktioniert das nicht? –

+0

Wie gibst du die SlaveCalendar1.SelectedDates an diese. SelectedDates? Ich verstehe, dass Sie es tun, indem Sie den Bindungsmodus auf OneWayToSource einstellen. Es scheint, dass diese Codezeile immer noch als eine Zuweisung interpretiert wird, für die Sie einen Setter benötigen. Es gibt viele Problemumgehungen! – Dabblernl

+1

Also, wenn ich richtig verstehe, kann ich eine schreibgeschützte Eigenschaft nicht binden, auch wenn die Bindung OneWayToSource ist; eine Bindung, die nur aus der schreibgeschützten Eigenschaft liest? Vielen Dank –