我不太确定如何使用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(...)]" />
行不通的,因为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 时,此操作才有效。