WPF: 集合依赖属性“只读,无法从标记设置”

10

我正在创建一个用户控件,用于显示三个月的日历。该控件基于WPF日历控件(WPF Toolkit 2009-06),我希望将一些日历属性传递到我的用户控件相应的属性中。用户控件属性设置为依赖属性,并且它们的底层类型与日历属性的类型匹配。以下是我的标记:

<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>

除了SelectedDates属性外,所有属性都能绑定成功。在其绑定时出现以下错误:

'SelectedDates'属性是只读的,不能从标记中设置。

我怀疑是因为SelectedDates属性是一个集合,但我不确定如何解决这个问题。有人可以告诉我问题的原因并提供解决方案吗?感谢您的帮助。

1个回答

2
如果我理解正确,您的代码后端具有与用户控件中日历控件的属性名称和类型匹配的依赖属性。您正在尝试将各种日历控件的SelectedDates集合分配给代码后面同名的依赖属性。
您可以通过一行代码简单地完成此操作:this.SelectedDates=SlaveCalendar1.SelectedDates,在选定日期被添加时触发适当的事件处理程序。
即使您设置了绑定为OneWayToSourceSelectedDates=代码片段仍然是一个赋值语句。由于SelectedDates属性没有setter,因此不可能编写此代码片段。 这里您可以找到关于日历控件文档的链接。

这里让我感到困惑的是:如果我从SlaveCalendar1传递值到我的用户控件属性,我只读取SlaveCalendar1.SelectedDates;我写入的是我已经定义了setter的MyUserControl.SelectedDates。换句话说,MyUserControl.SelectedDates不是只读的,这就是我要写入的内容。为什么这样做不起作用呢? - David Veeneman
你是如何将SlaveCalendar1.SelectedDates传递给this.SelectedDates的?我理解你是通过将绑定模式设置为OneWayToSource来实现的。尽管如此,这行代码似乎仍然被解释为一个赋值操作,因此需要一个setter。不过,有很多解决方法! - Dabblernl
2
所以,如果我理解正确的话,即使绑定是 OneWayToSource,也不能绑定只读属性;也就是说,只能从只读属性中读取的绑定?谢谢。 - David Veeneman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接