gpt4 book ai didi

wpf - 使用 Prism WPF 在 Datagrid 中绑定(bind)命令

转载 作者:行者123 更新时间:2023-12-01 19:25:00 27 4
gpt4 key购买 nike

我在谷歌上搜索了我的问题,但找不到任何可以解决我的问题的答案。我尝试从 WPF 中的数据网格内的按钮绑定(bind)命令。我使用 Prism 来处理 MVVM。这是我绑定(bind)命令的代码:

<DataGrid AutoGenerateColumns="False" 
...
SelectedItem="{Binding OrderDetail}"
ItemsSource="{Binding ListOrderDetail}">
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Content="Deliver Order"
Command="{Binding Path=DataContext.DeliverOrderCommand}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>

这是我的 View 模型,其中包含命令函数:

public ICommand DeliverOrderCommand
{
get
{
if (deliverOrderCommand == null)
deliverOrderCommand = new DelegateCommand(DeliverOrderFunc);
return deliverOrderCommand;
}
set { deliverOrderCommand = value; }
}

当我尝试调试时,它没有输入 ICommand。那么如何将数据网格内的按钮绑定(bind)到我的 View 模型?

最佳答案

您的问题是因为 DataColumns 不是可视化树的一部分,因此不继承 DataGrid 的 DataContext。

潜在克服此问题的一种方法是使用您的绑定(bind)指定祖先:

<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Content="Deliver Order"
Command="{Binding Path=DataContext.DeliverPesananCommand
,RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"
/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>

另一种(有点 hacky)的方法是声明一个帮助器类,该类为 DataGridColumn 类创建一个附加属性,然后在网格的数据上下文更改时填充该属性(它通过处理在 FrameworkElement 级别更改的事件来实现这一点)检查负责事件的依赖对象是否是 DataGrid):

public class DataGridContextHelper
{

static DataGridContextHelper()
{
DependencyProperty dp = FrameworkElement.DataContextProperty.AddOwner(typeof(DataGridColumn));
FrameworkElement.DataContextProperty.OverrideMetadata( typeof(DataGrid)
,new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.Inherits, OnDataContextChanged)
);
}

public static void OnDataContextChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var grid = d as DataGrid;
if (grid == null) return;

foreach (var col in grid.Columns)
{
col.SetValue(FrameworkElement.DataContextProperty, e.NewValue);
}
}
}

您可以找到有关此方法的更多详细信息here .

关于wpf - 使用 Prism WPF 在 Datagrid 中绑定(bind)命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13339249/

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