gpt4 book ai didi

c# - 如何从 DataGridTemplateColumn.CellTemplate 访问按钮

转载 作者:太空狗 更新时间:2023-10-29 22:00:35 24 4
gpt4 key购买 nike

我有以下用于 DataGrid 的 .xaml,并希望在 .cs 代码中的特定条件下显示/隐藏按钮。xaml 代码如下

<DataGridTemplateColumn Header="Action" Width="auto" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Button x:Name="btnConfirm" Content="Confirm" Click="ConfirmButton_Click" Height="auto" Width="auto" Opacity="100" Background="Transparent" BorderBrush="Transparent" HorizontalAlignment="Left"/>
<Button x:Name="btnDecline" Content="Decline" Click="btnDecline_Click" Height="auto" Width="auto" Opacity="100" Background="Transparent" BorderBrush="Transparent" HorizontalAlignment="Left" />
<Button x:Name="btnCancel" Content="Cancel" Click="btnCancel_Click" Height="auto" Width="auto" Opacity="100" Background="Transparent" BorderBrush="Transparent" HorizontalAlignment="Left"/>
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

.cs 代码如下

foreach (sp_ProcessingJobsResult item in grdUnConfirmJobs.ItemsSource)
{
var row = grdUnConfirmJobs.ItemContainerGenerator.ContainerFromItem(item) as System.Windows.Controls.DataGridRow;
if (item.Status == "Cancellation Requested.")
{
//how find control
}
}

最佳答案

您必须为此使用绑定(bind)。因此,让我们采取一种快速的方法:

这是背后的代码:

public partial class MainWindow : Window
{
public bool ButtonIsVisible
{
get { return (bool)GetValue(ButtonIsVisibleProperty); }
set { SetValue(ButtonIsVisibleProperty, value); }
}

// Using a DependencyProperty as the backing store for ButtonIsVisible. This enables animation, styling, binding, etc...
public static readonly DependencyProperty ButtonIsVisibleProperty =
DependencyProperty.Register("ButtonIsVisible", typeof(bool), typeof(MainWindow), new UIPropertyMetadata(true));

public ObservableCollection<Person> items { get; set; }

public MainWindow()
{
InitializeComponent();
items = new ObservableCollection<Person>();
items.Add(new Person() { Name = "FirstName" });
items.Add(new Person() { Name = "SecondName" });

this.DataContext = this;
}
}

这是我的例子的模型:

public class Person : INotifyPropertyChanged
{
private string _Name;

public string Name
{
get { return _Name; }
set
{
_Name = value;
PropertyChanged(this, new PropertyChangedEventArgs("Name"));
}
}

public event PropertyChangedEventHandler PropertyChanged = delegate { };
}

您的 Visibility 不是 bool 类型,因此我们需要一个转换器:

public class BoolToVis : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var isVisible = (bool)value;

return isVisible ? Visibility.Visible : Visibility.Hidden;
}

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

这是完整的 XAML 代码:

<Window x:Class="DataGridCellsBackground.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525"
xmlns:local="clr-namespace:DataGridCellsBackground" >
<Grid>
<Grid.Resources>
<local:BoolToVis x:Key="BoolTovisibilityConverter"/>
</Grid.Resources>
<DataGrid SelectionUnit="Cell"
ItemsSource="{Binding items}"
AutoGenerateColumns="False">
<DataGrid.Resources>
</DataGrid.Resources>
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Content="Visible" Visibility="{Binding RelativeSource={RelativeSource AncestorType=DataGrid}, Path=DataContext.ButtonIsVisible, Converter={StaticResource BoolTovisibilityConverter}}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>

您确实在按钮可见性中看到了一种奇怪的绑定(bind)语法。这是为什么?我假设您不需要模型中的此功能,所以我返回到 DataGrid 的 DataContext 以访问该 DependencyProperty。我不完全确定您的情况,但我已经向您展示了一些易于使用的机制。

关于c# - 如何从 DataGridTemplateColumn.CellTemplate 访问按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30797544/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com