[WPF绑定到Datagrid内部Datacontext的命令

问题描述 投票:0回答:2

我刚刚开始使用WPF和MVVM,并设法将我的Datagrid绑定到我的DataContext ViewModel类的列表ProductList。但是,我现在试图将DataGrid内的[[bind按钮绑定到DataContext类的某些命令。

<DataGrid x:Name="myDataGrid" ItemsSource="{Binding ProductsList}" x:FieldModifier="public" AutoGenerateColumns="False"> <DataGrid.Columns> <DataGridTextColumn Header="No MAT" Binding="{Binding MATProductNumber}" Width="0.1*"/> <DataGridTextColumn Header="Format" Binding="{Binding tblFormat.FormatName}" Width="0.1*"/> <DataGridTextColumn Header="Nom produit" Binding="{Binding tblProduct.ProductName}" Width="0.1*"/> <DataGridTextColumn x:Name="productGradeHeader" Header="Grade" Binding="{Binding tblGrade.GradeName}" Width="0.1*"/> <DataGridTemplateColumn Width=".1*" <DataGridTemplateColumn.HeaderTemplate> <DataTemplate> <StackPanel Orientation="Horizontal"> <Button x:Name="leftArrowSearchButton" Command="{Binding PreviousPageCommand}" CommandParameter="1"> <materialDesign:PackIcon Kind="ArrowLeftThick" Width="25" Height="25" VerticalAlignment="Center"/> </Button> <Button x:Name="rightArrowSearchButton" Command="{Binding NextPageCommand}" CommandParameter="1"> <materialDesign:PackIcon Kind="ArrowRightThick" Width="25" Height="25" VerticalAlignment="Center"/> </Button> </StackPanel> </DataTemplate> </DataGridTemplateColumn.HeaderTemplate> </DataGridTemplateColumn> </DataGrid.Columns> </DataGrid>
这行应该在我的数据上下文中绑定到

PreviousPageCommand

<Button x:Name="leftArrowSearchButton" Command="{Binding PreviousPageCommand}" CommandParameter="1" ToolTip="Voir la page précédente" Height="24" Width="53" Margin="0,0,20,0">
我已经调试,发现它甚至没有调用该函数。因此,我几乎可以确定绑定存在问题。

似乎我的按钮正在尝试绑定到ProductsList的元素。有没有办法回到上一级?我已经尝试将我的按钮绑定到DataContext.PreviousPageCommand

预先感谢!

c# wpf mvvm mvvm-light icommand
2个回答
0
投票
您好,您可以按照以下步骤操作:

{Binding DataContext.PreviousPageCommand, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}

但是绑定只会在DataGrid.DataContext更改时更新,而在DataContext.PreviousPageCommand更改时不会更新。

0
投票
正如我的评论中所述,您需要绑定到(ViewModel)Parent/Ancestor.DataContext

Command="{Binding RelativeSource={RelativeSource AncestorType={x:Type Window}}, Path=DataContext.PreviousPageCommand}"

您还需要绑定SelectedItemDataGrid,以便ViewModel知道用户单击时按钮位于哪一行。或将按钮的DataContext绑定到CommandParameter。就像评论中提到的

@ Andy

© www.soinside.com 2019 - 2024. All rights reserved.