DataGrid 中 Button 的 Command 属性遇到绑定错误

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

我正在尝试使用 WPF DataGrid 中的按钮。我的数据网格 ItemsSource 绑定到一个类,但我希望按钮在 ViewModel 中调用 ICommand。我已经看过十几个或更多关于此的帖子,但仍然无法正常工作。

我的数据网格 xaml:

<DataGrid Name="gridSettingsData" FontSize="13" BorderThickness="0"  AutoGenerateColumns="False" CanUserAddRows="False" CanUserReorderColumns="False" SelectedItem="{Binding SelectedSettingsStatus, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"  ItemsSource="{Binding lstDetailedSettingsStatus, UpdateSourceTrigger=PropertyChanged}" ScrollViewer.CanContentScroll="True" ScrollViewer.HorizontalScrollBarVisibility="Auto" ScrollViewer.VerticalScrollBarVisibility="Auto"  >
                            <DataGrid.Columns>
                                <DataGridTextColumn IsReadOnly="True" Binding="{Binding Path=FileType}" ClipboardContentBinding="{x:Null}" Header="FileType" Width="160" />
                                <DataGridTextColumn IsReadOnly="True" Binding="{Binding Path=FileStatus}" ClipboardContentBinding="{x:Null}" Header="FileStatus" Width="580" />
                                <DataGridTextColumn IsReadOnly="True" Binding="{Binding Path=ExpectedVersion}" ClipboardContentBinding="{x:Null}" Header="ExpectedVersion" Width="120" />
                                <DataGridTextColumn IsReadOnly="True" Binding="{Binding Path=LastLoadedVersion}" ClipboardContentBinding="{x:Null}" Header="LastLoadedVersion" Width="120" />

                                <DataGridTemplateColumn Header="View" Width="50">
                                    <DataGridTemplateColumn.CellTemplate>
                                        <DataTemplate>
                                            <Button Content="View"
                                                    Command="{Binding GetSettingsCommand, RelativeSource={RelativeSource AncestorType=viewmodels:vmProgramming}}" 
                                                    CommandParameter="{Binding ElementName=gridSettingsData, Path=SelectedItem}"  >
                                            </Button >
                                        </DataTemplate>
                                    </DataGridTemplateColumn.CellTemplate>
                                </DataGridTemplateColumn>

                            </DataGrid.Columns>
                        </DataGrid>

来自我的 ViewModel:

public class vmProgramming : BaseViewModel, IPageViewModel
{
    public ICommand GetSettingsCommand { get; private set; }


       public vmProgramming()
       {
          // the relevant part... 
          GetSettingsCommand = new CommunityToolkit.Mvvm.Input.RelayCommand<object>(GetSettings);
       }

       private async void GetSettings(object obj)
       {
          // a bunch of stuff, including some async things... 
       }
}

当我运行它时,我在数据网格按钮的 Command 属性上遇到绑定错误。我确实在不在 DataGrid 上的视图上的另一个按钮上使用了 GetSettings() 方法。视图和视图模型之间的所有其他内容都有效,数据网格显示我期望的数据。只是按钮不起作用。

wpf button datagrid
1个回答
0
投票

试试这个:

<Button Content="View"
        Command="{Binding DataContext.GetSettingsCommand, RelativeSource={RelativeSource AncestorType=DataGrid}}" 
        CommandParameter="{Binding SelectedItem, RelativeSource={RelativeSource AncestorType=DataGrid}}"  ... />

您不能在

DataGrid
的绑定中使用
ElementName
来引用父级
CellTemplate
,因为它在不同的命名范围内。并且
AncestorType
应该设置为可视化树中的元素类型。

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