我刚刚开始使用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
预先感谢!
{Binding DataContext.PreviousPageCommand, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}
但是绑定只会在DataGrid.DataContext更改时更新,而在DataContext.PreviousPageCommand更改时不会更新。
Parent/Ancestor.DataContext
Command="{Binding RelativeSource={RelativeSource AncestorType={x:Type Window}}, Path=DataContext.PreviousPageCommand}"
您还需要绑定SelectedItem
的DataGrid
,以便ViewModel知道用户单击时按钮位于哪一行。或将按钮的DataContext
绑定到CommandParameter
。就像评论中提到的@ Andy