0

I have a datagrid with binding to some collection

ObservableCollection<SpecRowViewModel> rows;

Items woul be

public class SpecRowViewModel
{
    public ISpecificationItem Item { get; set; }
    public virtual string Name { get { return Item.Name; } set { Item.Name = value; } }
    public virtual string Description { get { return Item.Designation; } set { Item.Designation = value; } }
    public SpecRowViewModel() {}
    public SpecRowViewModel(ISpecificationItem item) { Item = item; }
}

public class RefMaterialRow : SpecRowViewModel
{
    public override  string Name { get { return Item.MaterialPanelData.MaterialNameInBase; } set { Item.MaterialPanelData.MaterialNameInBase = value; } }
    public override string Description { get { return Item.MaterialPanelData.MaterialDesignationInBase; } set { Item.MaterialPanelData.MaterialDesignationInBase = value; } }
    public RefMaterialRow(ISpecificationItem mat) : base() { Item = mat; }
}

public class RefStandartRow: SpecRowViewModel
{
    public override string Name { get { return Item.MaterialPanelData.MaterialNameInBase; } set { Item.MaterialPanelData.MaterialNameInBase = value; } }
    public override string Description { get { return Item.MaterialPanelData.MaterialDesignationInBase; } set { Item.MaterialPanelData.MaterialDesignationInBase = value; } }
    public RefStandartRow(ISpecificationItem mat) : base() { Item = mat; }
}

DataGrid cell with converter

<DataGridTemplateColumn x:Name="fd"
                    Width="150"
                    Header="Обозначение">
 <DataGridTemplateColumn.CellTemplate>
    <DataTemplate>
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition />
                <ColumnDefinition Width="Auto" />
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition />
                <RowDefinition />
            </Grid.RowDefinitions>
                <TextBlock Grid.Row="0"
                           Grid.RowSpan="2"
                           Grid.Column="0"
                           HorizontalAlignment="Left"
                           Text="{Binding Path=Description}"
                           TextWrapping="Wrap" />
                <Button Grid.Row="0"
                           Grid.Column="1"
                           Visibility="{Binding Converter={StaticResource ButtonVisibleConverter}}" />
        </Grid>
    </DataTemplate>
 </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

I need to make the buttons not all cells of the table but only in some. I did Converter visibility but it works on all cells in the row. How do I make a button visible only at some cells?

public class SpecItemToButtonVisibleConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        var intValue = (SpecRowViewModel) value;
        if (intValue.Item == null) return Visibility.Collapsed;
        if (intValue is RefMaterialRow)
        {
        }
        switch (intValue.Item.Type)
        {
            case EDocumentSection.Parts:
                return Visibility.Visible;
            case EDocumentSection.Materials:
                return Visibility.Visible;
            case EDocumentSection.StandartParts:
                return Visibility.Visible;
        }
        return Visibility.Collapsed;
    }

    public object ConvertBack(object value, Type targetType, object parameter,
        System.Globalization.CultureInfo culture)
    {
       throw new NotImplementedException();
    }
}

In the picture I disclosed more clearly

Buttons in some cells

streamdown
  • 390
  • 4
  • 17

1 Answers1

1

I think you must use conditional datatemplate.

Conditional DataTemplate

Another question was already asked on this topic :)

Good reading.

Community
  • 1
  • 1
pix
  • 1,264
  • 19
  • 32