如果特定文本在行单元格中,如何更改DataGrid中的按钮可见性?
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Click="ConfirmEvent"
Visibility="if (SensorValueText == "qwerty") Visible"
Margin="0"
Content=""
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
IsEnabled="True"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
答案 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)