0

我有一个数据网格,我想在其中为每一行添加一个按钮。根据条件,该按钮应具有其他功能。数据网格由一些文件的列表组成,这些文件可以安装,如果已经存在,可以使用按钮卸载。因此,该按钮应称为“安装”或“卸载”。

我创建了以下 xaml

...
<Grid.Resources>            
    <local:ButtonTemplateSelector x:Key="buttonTemplateSelector">
        <local:ButtonTemplateSelector.InstallButtonTemplate>
        <DataTemplate>
            <Button x:Name="btn_installSnippet" Click="btn_installSnippet_Click">Install</Button>
        </DataTemplate>
        </local:ButtonTemplateSelector.InstallButtonTemplate>
        <local:ButtonTemplateSelector.UninstallButtonTemplate>
        <DataTemplate>
            <Button x:Name="btn_uninstallSnippet" Click="btn_uninstallSnippet_Click">Uninstall</Button>
        </DataTemplate>
            </local:ButtonTemplateSelector.UninstallButtonTemplate>
    </local:ButtonTemplateSelector>
</Grid.Resources>
...
<DataGrid x:Name="dataGrid_newViews" ItemsSource="{Binding}" HorizontalAlignment="Left" Height="148" Margin="40,152,0,0" VerticalAlignment="Top" Width="685" AutoGenerateColumns="True" SelectedCellsChanged="Datagrid_SelectedCellsChanged" CanUserAddRows="false" Grid.ColumnSpan="2">
    <DataGrid.Columns>
        <DataGridTemplateColumn Header="Button" CellTemplateSelector="{StaticResource buttonTemplateSelector}" />
    </DataGrid.Columns>
</DataGrid>

在我的主要代码中,我创建了以下内容:

public class ButtonTemplateSelector : DataTemplateSelector
{
    public DataTemplate InstallButtonTemplate { get; set; }
    public DataTemplate UninstallButtonTemplate { get; set; }

    public override System.Windows.DataTemplate SelectTemplate(object item, System.Windows.DependencyObject container)
    {
      return InstallButtonTemplate;
    }
}

在这里,我完全被困在如何从行(从数据网格绑定)中获取值,以编写是否InstallButtonTemplateUninstallButtonTemplate应该返回的条件。

4

1 回答 1

0

您已经完成了几乎所有的工作,缺少的一件是将您的object item参数转换为您要绑定到的集合中项目的数据类型,如下所示:

public class ButtonTemplateSelector : DataTemplateSelector
{
    public DataTemplate InstallButtonTemplate { get; set; }
    public DataTemplate UninstallButtonTemplate { get; set; }

    public override System.Windows.DataTemplate SelectTemplate(object item, System.Windows.DependencyObject container)
    {
      var myItem = (YourType)item;
      if (myItem.FilePresent == true){
         return UninstallButtonTemplate ;
      }
      return InstallButtonTemplate;
    }
}
于 2020-09-21T11:57:17.660 回答