【问题标题】:UWP - Command from DataGrid is not calledUWP - 未调用来自 DataGrid 的命令
【发布时间】:2020-08-10 02:27:21
【问题描述】:

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】:

    很好的问题,DataGrid 控件中的这个已知问题。目前有针对CellTemplate中的按钮绑定命令的解决方案,请在datasouce中添加该命令。

    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就可以了。

    【讨论】:

    • Mmh,是否有任何解决方法不那么“脏”,只需将命令保留在 ViewModel 中会很棒.. 或者我将删除 DataGrid 并使用带有网格的简单 ListView。那个DataGrid实际上没用..谢谢你的回答顺便说一句
    • 如果不具体DataGrid,可以用listview替换,Binding ElementName就可以了。
    猜你喜欢
    • 2015-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-30
    • 2016-10-22
    • 1970-01-01
    • 2013-06-16
    相关资源
    最近更新 更多