对于我正在处理的GUI应用程序,我需要一个用于编辑时间表的网格。每个调度是一个“小时”对象的阵列,定义为:WPF DataGrid根据更改更新所有行
<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>
在任何时间一排在数据网格中改变:
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
}
这些目的将在以下数据格奠定了,这会导致整个列接收到相同的更改(一旦数据网格刷新)。例如,如果我在星期三的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
方法不会被调用。我试图通过添加一个MessageBox对话框来测试每次绑定时行UpdateSourceTrigger=PropertyChanged
,但这并没有改变结果。我不确定这意味着什么,因为结果肯定会改变,但是这种方法似乎没有被调用。任何想法有什么不对?
您可以显示如何构建'SchedulePage'实例吗? –
当然,我有以下代码: 让blankSchedule = Array.create 24 { 星期日=假 周一=假 周二=假 周三=假 周四=假 周五=假 周六=假 } 我只需要'SchedulePage blankSchedule'来构造它,并重新使用该引用。 – NerdicViking