UWP-不调用DataGrid的命令

问题描述 投票:1回答:1

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对象访问它)

提前感谢:)

c# uwp binding datagrid command
1个回答
1
投票

很好的问题,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将起作用。

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