UWP应用程序(重要,因为没有AncestorType)我无法从DataGridTemplateColumn绑定ViewModel的命令(其他任何值)。这是我当前的代码(实际上,我已经尝试过一切)]
<controls:DataGrid
x:Name="DataGrid"
Grid.Row="2"
Height="Auto"
Margin="12"
AutoGenerateColumns="False"
HorizontalContentAlignment="Center"
ItemsSource="{Binding ProviderOrders}">
<controls:DataGrid.Columns>
<controls:DataGridTemplateColumn Header="Actions" Width="*">
<controls:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Content="Modifier" Command="{Binding DataContext.EditOrderCommand, RelativeSource={RelativeSource Mode=Self}}" CommandParameter="{Binding}" Style="{StaticResource PrimaryButton}"/>
</DataTemplate>
</controls:DataGridTemplateColumn.CellTemplate>
</controls:DataGridTemplateColumn>
</controls:DataGrid.Columns>
</controls:DataGrid>
我也尝试过
<Button Content="Modifier" Command="{Binding ElementName=DataGrid, Path=DataContext.EditOrderCommand}" CommandParameter="{Binding}" Style="{StaticResource PrimaryButton}"/>
没有错误,但是如果我将按钮移到DataGrid之外,则我的命令没有运行,并且我的命令正在运行。
DataGridTemplateColumn DataContext是ProviderOrder对象,因此我需要访问ViewModel(显然无法从ProviderOrder对象访问它)
提前感谢:)
很好的问题,DataGrid
控件中的此已知问题。当前,此场景下有一个工作区,该工作区将CellTemplate
中的按钮绑定命令,请将该命令添加到数据源中。
public class Item
{
public string ID { get; set; }
public ICommand BtnCommand
{
get
{
return new CommadEventHandler<Item>((s) => BtnClick(s));
}
}
private void BtnClick(Item s)
{
}
}
Xaml代码
<controls:DataGridTemplateColumn>
<controls:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button
Command="{Binding BtnCommand}"
Content="Click"
/>
</DataTemplate>
</controls:DataGridTemplateColumn.CellTemplate>
</controls:DataGridTemplateColumn>
更新
如果不是特定的DataGrid
,则可以使用listview进行替换,并且Binding ElementName
将起作用。