DataGrid AutoGeneratingColumn Action in Caliburn.Micro

本文关键字:Caliburn Micro in Action AutoGeneratingColumn DataGrid | 更新日期: 2023-09-27 18:35:45

我不太确定如何使用WPF中的Caliburn.Micro Actions来连接AutoGeneratingColumn事件。我尝试以与您相同的方式进行操作[Event Click] = ...但无济于事(它不调用IDRemover)。任何指导将不胜感激。

视图

<DataGrid x:Name="MyObservableCollection" AutoGenerateColumns="True" cal:Message.Attach="[Event AutoGeneratingColumn] = [Action IDRemover($eventArgs)]"></DataGrid>

视图模型

public void IDRemover(System.Windows.Controls.DataGridAutoGeneratingColumnEventArgs e)
    {
        if (e.PropertyName == "ID")
            e.Cancel = true;
    }

在相关说明中,使用操作参数与消息之间是否存在任何明显差异。附加方法:

<i:Interaction.Triggers>
    <i:EventTrigger EventName="Click">
        <cal:ActionMessage MethodName="DoStuff">
            <cal:Parameter Value="{Binding ...}" />
        </cal:ActionMessage>
    </i:EventTrigger>
</i:Interaction.Triggers>

<Button cal:Message.Attach="[Event Click] = [Action DoStuff(...)]" />

DataGrid AutoGeneratingColumn Action in Caliburn.Micro

这是

行不通的,因为Caliburn.Micro利用System.Windows.Interactivity作为它的触发机制,并且该技术不适用于AutoGeneratingColumn事件,因为它不是RoutedEvent或RoutedUIEvent,它是一个普通的.NET事件。

若要解决此问题,可以在视图的代码隐藏文件中处理该事件。

在相关说明中,使用操作参数与消息附加方法之间是否有任何明显差异?

后一种技术,即 Message.Attach 技术是为那些手动密集使用 XAML 的人发明的,因此他们不会键入太多内容。

第一种技术,即您称为动作参数的技术,可以通过拖放Microsoft Expression Blend等设计师自动生成,因此如果您是设计师,您会喜欢这种技术。

无论如何,Message.Attach 技术由 Caliburn.Micro 自动转换为等效的 Action Parameters 技术。

您已附加如下方法

在视图中:

自动生成列="True"
cal:Message.Attach="[EventAutoGeneratingColumn] = [Action ModifyDataGridColumn($this, $eventargs)];"

在视图中模型:

public void ModifyDataGridColumn(object sender, DataGridAutoGeneratingColumnEventArgs e) {

}

仅当自动生成列为 true 时,此操作才有效。