gpt4 book ai didi

wpf - DataTemplate 中的 EventToCommand

转载 作者:行者123 更新时间:2023-12-03 17:48:04 25 4
gpt4 key购买 nike

我正在使用 MVVM-light-Toolkit 中的 EventToCommand 类来处理 WPF-DataGrid 中的 AutoGeneratingColumn-Event。它在我的 Main-DataGrid 中运行良好,但我在 RowDetailsTemplate 中使用了另一个 DataGrid,在这里我遇到了一个问题:
AutoGeneratingColumn 在生成 EventToCommand-Object 之前触发。这个问题有解决方案吗?
这是我的一段 Xaml 代码:

<DataGrid DockPanel.Dock="Top" AutoGenerateColumns="True" Name="table" VerticalAlignment="Top" ItemsSource="{Binding PartBatchList}" IsReadOnly="True">
<i:Interaction.Triggers>
<i:EventTrigger EventName="AutoGeneratingColumn">
<hgc:EventToCommand Command="{Binding AutoGeneratingColumnCommand}" PassEventArgsToCommand="True"/>
</i:EventTrigger>
</i:Interaction.Triggers>
<DataGrid.RowDetailsTemplate>
<DataTemplate>
<StackPanel Margin="30,0,30,30" Orientation="Vertical">
<Border CornerRadius="4" Padding="5" Background="White">
<DataGrid ItemsSource="{Binding Workpieces}"
CanUserReorderColumns="False" CanUserResizeColumns="False" CanUserSortColumns="False"
AutoGenerateColumns="True" AutoGeneratingColumn="WorkpieceListAutoGeneratingColumn">
<i:Interaction.Triggers>
<i:EventTrigger EventName="AutoGeneratingColumn">
<hgc:EventToCommand Command="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGrid},AncestorLevel=2}, Path=DataContext.AutoGeneratingColumnCommand}" PassEventArgsToCommand="True"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</DataGrid>
</Border>
</StackPanel>
</DataTemplate>
</DataGrid.RowDetailsTemplate>

</DataGrid>

代码隐藏文件中的事件处理程序 WorkpieceListAutoGeneratingColumn 被调用,我的 ViewModel 中的命令从未被调用。

安德烈亚斯

最佳答案

原因应该是你不能有一个事件处理程序和一个事件来命令同一个对象/事件组合。删除 AutoGeneratingColumn="WorkpieceListAutoGeneratingColumn"从您的 DataGrid 应调用该命令。

我自己曾经遇到过这个问题:-)

编辑

如果您需要后面代码中的事件处理程序,请删除 EventToCommand并在后面的代码中调用命令,例如

public void WorkpieceListAutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs args) {
var vm = ((YourViewModel) this.DataContext);
if (vm.AutoGeneratingColumnCommand.CanExecute(eventArgs))
vm.AutoGeneratingColumnCommand.Execute(eventArgs);
}

但是,我认为第一个选项更好。

编辑 2

好吧,环顾四周,似乎 <i:Interaction.Triggers/>仅在对象已经呈现并且用户交互发生后才有效(因此名称?)。嗯,这意味着只有一些事件——在对象的构造过程中被调用的事件——不能被 EventToCommand 处理。机制。在这些情况下,可以使用背后的代码从那里调用您的命令,请参阅我的第一个编辑。

关于wpf - DataTemplate 中的 EventToCommand,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7671783/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com