【问题标题】:WPF Datagrid - subscribe to cell load event?WPF Datagrid - 订阅单元格加载事件?
【发布时间】:2017-04-06 21:05:56
【问题描述】:

我希望在单元格加载后在代码隐藏中修改数据网格单元格的布局。

我知道我可以订阅 DataGrid.LoadDataGrid.LoadingRow 事件,但我希望有一种方法可以订阅特定的单个单元格的负载事件,以便实现更清晰。在documentation 中,似乎单元类具有事件(继承自 FrameworkElement),但我找不到干净地订阅事件的方法。

我正在使用 DataGridTemplateColumn,我认为在 XAML (CellTemplate) 中很容易做到这一点。

<DataGridTemplateColumn Header="ATTENDEES" Width="*">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <ItemsControl ItemsSource="{Binding Path=attendees}" x:Name="AttendeesItemsControl"/>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

谢谢!

【问题讨论】:

    标签: c# .net wpf xaml datagrid


    【解决方案1】:

    您可以使用DataGridColumn.CellStyleEventSetter 来实现:

    <DataGridTemplateColumn>
        <DataGridTemplateColumn.CellStyle>
            <Style TargetType="{x:Type DataGridCell}">
                <EventSetter Event="Loaded" Handler="CellLoaded" />
            </Style>
        </DataGridTemplateColumn.CellStyle>
    </DataGridTemplateColumn>
    

    在代码隐藏中:

    private void CellLoaded(object sender, EventArgs e)
    {
        var cell = (DataGridCell)sender;
        ...
    }
    

    【讨论】:

    • “初始化”事件呢? ,我做了同样的事情: ,它标记为“Initialized”,事件 Initialized 不是路由元素
    • @KhalilLazhar 好吧,正如错误消息所述,Initialized 不是RoutedEvent,因此不能与EventSetter 一起使用。我不确定在DataGridCell 上订阅该事件是否有简单的方法。无论如何我认为这不是一个好主意,因为这个事件只触发一次,而DataGridCell 可以用作各种单元格值的容器,因为它可能在启用虚拟化时被重用。
    • 是的,这就是我想要的,一个只会触发一次的事件,关于订阅的任何想法?谢谢
    • 在快速浏览source code 之后,我认为没有简单的方法可以实现这一目标。但是,作为一种解决方法,您可以注册一个 Loaded 处理程序,该处理程序将自行取消注册(通过在该处理程序内取消订阅) - 这样它只会被调用一次。除此之外,我不会有太多帮助。
    猜你喜欢
    • 1970-01-01
    • 2016-03-29
    • 1970-01-01
    • 1970-01-01
    • 2011-06-25
    • 2011-12-31
    • 1970-01-01
    • 1970-01-01
    • 2010-11-23
    相关资源
    最近更新 更多