- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有以下用于 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/
:) 我有一个 DataGrid。 Column2 中有“ComboBox1”,Column3 中有“ComboBox2”。只要“ComboBox1”的 SelectedIndex=0,我就想在“Co
我需要创建一个通用的DataGridTemplateColumn,以便可以在具有不同对象和属性的应用程序中使用它。 这是一些示例代码,我在我的项目中使用
嗨,我有一个 datagrid,它有许多 datagridtemplate 列,除了它们每个在模板的堆栈面板上都有不同的 datacontext 之外,这些列都是相同的。
我正在使用 WPF DataGrid来自 WPF 工具包。 我在我的 DataGrid 中添加了一个模板列,其中有 CheckBox在每个单元格中。现在如何访问这些单元格中的值? 我在 DataGri
我想将自定义控件添加到数据网格的模板列中。 自定义控件与文本框非常相似,但其中有一个图标。用户可以单击该图标,在提示窗口中选择一项,则所选项目将被填充到文本框中。 我的问题是当文本框被填充时,单击第二
如果 value in row = "No payment"我需要在数据模板中显示组合框,否则我不在行中显示组合框,我该怎么做? 这是我的数据网格模板:
我目前正在尝试使用 DataGridTemplateColumn 创建自定义控件这将在我们的许多应用程序中重复使用。我在获取自定义控件的依赖属性以正确绑定(bind)和引发属性更改通知时遇到了一些问题
BitmapImage im = new BitmapImage(); string path1 = @"C:\abc.png"; im.UriSource=new Uri(path1); DataG
为什么这样做...
我在 WPF 中有一个 DataGrid。在绑定(bind)到特定的 ItemsSource 后,我尝试将 Button 添加到网格的某些单元格。我尝试在 xaml 中执行此操作,如下所示:
我有一个可编辑的 DataGridTemplateColumn。如果业务对象满足某些条件,我只希望用户能够编辑此列中单元格的内容。假设我的业务对象实现了 INotifyPropertyChanged
我有一个可编辑的 DataGridTemplateColumn。如果业务对象满足某些条件,我只希望用户能够编辑此列中单元格的内容。假设我的业务对象实现了 INotifyPropertyChanged
如何访问 DataGridTemplateColumn 中的控件以获取值? 我正在使用此代码:
我正在创建一个窗口,供用户删除多个数据库寄存器,使用 DataGrid 显示数据,使用 Button 执行删除 所以我在 DataGrid 中放了一个 DataGridTemplateColumn ,
这是我的代码: foreach (var columnData in lookup.DataProvider.Metadata) { DataGridColumn column
我有这个 XAML,它从 ItemSource 是一个枚举的组合框中选择一个值。我使用的教程是: http://www.c-sharpcorner.com/uploadfile/dpatra/comb
请帮助解决这个问题,我不确定如何处理。 我有组合框和数据网格。每当我选择组合框值时,数据网格都应该加载新数据并且效果很好。但是当我选中所有带复选框的列时,我的 DataGridTemplateColu
我想改变DataGridTemplateColumn的内容样式,这里是DataGridTemplateColumn的代码:
我想在 DataGrid 中有自定义列: 但是,单击CheckBox(选中/取消选中)不会触发属性 setter
我是一名优秀的程序员,十分优秀!