【发布时间】:2017-01-02 05:10:25
【问题描述】:
对于我正在开发的 GUI 应用程序,我需要一个用于编辑时间表的网格。每个时间表都是一个“小时”对象的数组,定义为:
type Hour = { // 24-hour units for every day
mutable Sunday : bool
mutable Monday : bool
mutable Tuesday : bool
mutable Wednesday : bool
mutable Thursday : bool
mutable Friday : bool
mutable Saturday : bool
}
这些对象排列在以下数据网格中:
<DataGrid x:Name="DataGrid" ItemsSource="{Binding Rows}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridCheckBoxColumn Header="Sunday" Binding="{Binding Sunday}" Width="*" />
<DataGridCheckBoxColumn Header="Monday" Binding="{Binding Monday}" Width="*" />
<DataGridCheckBoxColumn Header="Tuesday" Binding="{Binding Tuesday}" Width="*" />
<DataGridCheckBoxColumn Header="Wednesday" Binding="{Binding Wednesday}" Width="*" />
<DataGridCheckBoxColumn Header="Thursday" Binding="{Binding Thursday}" Width="*" />
<DataGridCheckBoxColumn Header="Friday" Binding="{Binding Friday}" Width="*" />
<DataGridCheckBoxColumn Header="Saturday" Binding="{Binding Saturday}" Width="*" />
</DataGrid.Columns>
</DataGrid>
每当数据网格中的行发生更改时,都会导致整个列接收相同的更改(刷新数据网格后)。例如,如果我在星期三取消设置 5:00,则整个星期三列将变为未设置。如果我将星期一设置为 8:00,则一旦刷新数据网格,整个星期一都会设置。
F#代码的相关部分:
type SchedulePage (schedule : Hour[]) as self =
inherit SchedulePageBase () // XAML<"SchedulePage.xaml">
do self.DataContext <- self
let mutable schedule = schedule
member self.Rows with get () = schedule and set value = schedule <- value
我的理论是self.Rows 的set 方法没有被调用。我尝试通过在每次将行UpdateSourceTrigger=PropertyChanged 添加到每个绑定时弹出一个 MessageBox 对话框来测试这一点,但这并没有改变结果。我不确定这意味着什么,因为结果肯定会改变,但是这个方法似乎没有被调用。知道有什么问题吗?
【问题讨论】:
-
您能展示一下您是如何构建
SchedulePage的实例的吗? -
当然,我有以下代码: let blankSchedule = Array.create 24 { Sunday = false Monday = false Tuesday = false Wednesday = false Thursday = false Friday = false Saturday = false } 我只是有@ 987654328@ 来构建它,我重用了参考。