WPF。 DataGrid可见性中的按钮

时间:2018-11-21 07:59:09

标签: c# wpf button

如果特定文本在行单元格中,如何更改DataGrid中的按钮可见性?

<DataGridTemplateColumn.CellTemplate>
    <DataTemplate>
        <Button Click="ConfirmEvent"
                Visibility="if (SensorValueText == "qwerty") Visible"
                Margin="0"  
                Content="" 
                HorizontalAlignment="Stretch" 
                VerticalAlignment="Stretch" 
                IsEnabled="True"/>
    </DataTemplate>
</DataGridTemplateColumn.CellTemplate>

3 个答案:

答案 0 :(得分:2)

为什么不创建一个新的Converter类?

class TextToVisibilityConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value.ToString() == "someValue")
        {
            return Visibility.Visible;
        }
        return Visibility.Collapsed;
    }

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

然后在xaml中,您可以调用转换器:

<local:TextToVisibilityConverter x:Key="TextConverter"/>

然后,您可以在按钮内调用它:

<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
    <Button Visibility="{Binding SomeText, Converter={StaticResource 
      TextToVisibilityConverter}}....>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>

随时询问是否有后续行动。

答案 1 :(得分:0)

数据触发将类似于:

    <DataTemplate>
        <Button Click="ConfirmEvent">
            <Button.Style>
                <Style TargetType="Button">
                    <Setter Property="Visibility" Value="Collapsed"/>
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding SensorValue}" Value="qwerty">
                            <Setter Property="Visibility" Value="Visible"/>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </Button.Style>
        </Button>
    </DataTemplate>

我看到您正在那里使用事件。 您可能会发现的下一个问题是确定用户单击按钮所在的行。 请记住,几乎所有wpf团队都使用一种称为MVVM的模式。 这样,您将绑定命令。 可以在每行使用的视图模型中进行操作,然后在每个视图模型之间来回复制数据。 要么 您可以将命令放在父视图模型中,该模型用作窗口的数据上下文,并将该行作为参数传递给该窗口。 一个说明这些技术的示例是: https://gallery.technet.microsoft.com/WPF-Command-and-Row-in-84635e1a

答案 2 :(得分:-2)

最好使用onChange()事件中的触发函数(例如textbox.onChange())并更改触发函数内部的可见性(button.hidden = true / false)