- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个类似于以下帖子的问题:
Silverlight DataGridTextColumn Binding Visibility
我需要根据 ViewModel 中的值使 Silverlight DataGrid 中的列可见/折叠。为此,我尝试将 Visibility 属性绑定(bind)到 ViewModel。但是我很快发现 Visibility 属性不是 DependencyProperty,因此它不能被绑定(bind)。
为了解决这个问题,我尝试子类化我自己的 DataGridTextColumn。通过这个新类,我创建了一个 DependencyProperty,它最终将更改推送到 DataGridTextColumn.Visibility 属性。如果我不进行数据绑定(bind),这很好用。当我将数据绑定(bind)到我的新属性时,它会失败,并出现 AG_E_PARSER_BAD_PROPERTY_VALUE 异常。
public class MyDataGridTextColumn : DataGridTextColumn
{
#region public Visibility MyVisibility
public static readonly DependencyProperty MyVisibilityProperty =
DependencyProperty.Register("MyVisibility", typeof(Visibility), typeof(MyDataGridTextColumn), new PropertyMetadata(Visibility.Visible, OnMyVisibilityPropertyChanged));
private static void OnMyVisibilityPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var @this = d as MyDataGridTextColumn;
if (@this != null)
{
@this.OnMyVisibilityChanged((Visibility)e.OldValue, (Visibility)e.NewValue);
}
}
private void OnMyVisibilityChanged(Visibility oldValue, Visibility newValue)
{
Visibility = newValue;
}
public Visibility MyVisibility
{
get { return (Visibility)GetValue(MyVisibilityProperty); }
set { SetValue(MyVisibilityProperty, value); }
}
#endregion public Visibility MyVisibility
}
<DataGrid ....>
<DataGrid.Columns>
<MyDataGridTextColumn Header="User Name"
Foreground="#FFFFFFFF"
Binding="{Binding User.UserName}"
MinWidth="150"
CanUserSort="True"
CanUserResize="False"
CanUserReorder="True"
MyVisibility="{Binding Converter={StaticResource BoolToVisibilityConverter}, Path=ShouldShowUser}"/>
<DataGridTextColumn .../>
</DataGrid.Columns>
</DataGrid>
最佳答案
这是我使用一点技巧提出的解决方案。
首先,您需要从 DataGrid 继承。
public class DataGridEx : DataGrid
{
public IEnumerable<string> HiddenColumns
{
get { return (IEnumerable<string>)GetValue(HiddenColumnsProperty); }
set { SetValue(HiddenColumnsProperty, value); }
}
public static readonly DependencyProperty HiddenColumnsProperty =
DependencyProperty.Register ("HiddenColumns",
typeof (IEnumerable<string>),
typeof (DataGridEx),
new PropertyMetadata (HiddenColumnsChanged));
private static void HiddenColumnsChanged(object sender,
DependencyPropertyChangedEventArgs args)
{
var dg = sender as DataGrid;
if (dg==null || args.NewValue == args.OldValue)
return;
var hiddenColumns = (IEnumerable<string>)args.NewValue;
foreach (var column in dg.Columns)
{
if (hiddenColumns.Contains ((string)column.GetValue (NameProperty)))
column.Visibility = Visibility.Collapsed;
else
column.Visibility = Visibility.Visible;
}
}
}
<my:DataGridEx x:Name="uiData"
DataContext="{Binding SomeDataContextFromTheVM}"
ItemsSource="{Binding Whatever}"
HiddenColumns="{Binding HiddenColumns}">
<sdk:DataGridTextColumn x:Name="uiDataCountOfItems">
Header="Count"
Binding={Binding CountOfItems}"
</sdk:DataGridTextColumn>
</my:DataGridEx>
private IEnumerable<string> _hiddenColumns;
public IEnumerable<string> HiddenColumns
{
get { return _hiddenColumns; }
private set
{
if (value == _hiddenColumns)
return;
_hiddenColumns = value;
PropertyChanged (this, new PropertyChangedEventArgs("HiddenColumns"));
}
}
public void SomeWhereInYourCode ()
{
HiddenColumns = new List<string> {"uiDataCountOfItems"};
}
关于silverlight - 如何绑定(bind) DataGridColumn.Visibility?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1045014/
我正在使用 LogicalTreeHelper.GetParent()方法递归查找各种其他 WPF 元素的根元素。这几乎适用于所有内容,但对于 DataGridColumn 则失败,例如 DataGr
我在我的数据网格中找到了 Columns 集合,并希望遍历它以找到某个列名称。但是,我不知道如何解决该列的 x:Name 属性。这个 xaml 用 DataGridTextColumn 和 DataG
我尝试了以下方法: 而且我没有看到任何工具提示。 有任何想法吗? 它甚至实现了吗? 最佳答案 这对我有用: 关于wpf - 无法
我的程序中有大量数据是从网络服务生成的。我需要在 DataGrid 中显示此数据,但返回的数据集合都有不同的格式(一个可能是 3 列,下一个可能是 7)所以我无法创建一个特定的对象来保存此数据。我无法
我正在 WPF MVVM 中创建动态 UI 应用程序,它将 UI 区域绑定(bind)到我的自定义 UIField 类的集合。 UIField 包含许多 BindingProperty 属性,允许我指
由于某种原因,我无法隐藏 WPF Toolkit 的 DataGridColumn。我正在尝试执行以下操作: 这不起作用,因为它在 ItemSource 上
我有一个类似于以下帖子的问题: Silverlight DataGridTextColumn Binding Visibility 我需要根据 ViewModel 中的值使 Silverlight D
现在(默认),当您单击用户可排序的 DataGridColumn 上的标题时,它会在第一次单击时按升序排序,在第二次单击时按降序排序。 如何使其在第一次点击时降序排列,在第二次点击时升序排列? 最佳答
是否可以在 Flex DataGridColumn 中显示多行字符串? 即显示: Text line one. Text line two. 我尝试在存储字符串时放入“\n”、“\r”、“ ”,但似乎
我希望 DataGridColumn 的前景色根据其值进行更改。我有 和转换器 public class negativeToColorConverter : IValueConverter {
我有一个 DataGridTextColumn,我想在其中显示电话号码。我允许用户在该列中键入内容,他们自然需要键入以 0 开头的数字。 但是,每当用户输入 0 时,列都会将其删除,因此它只是一个没有
我正在尝试对数字内容进行列排序。多重绑定(bind)转换器工作正常。此解决方案会将 SortMemberPath 设置为 null 我尝试了多种方法,并大量搜索了互联网。 出于安全目的,代码已从原始代
我正在使用相同的列和绑定(bind)集在应用程序中创建多个 DataGrid。我希望做的是使所有 DataGrid 对一个 DataGrid 中的更改做出适当的响应。如果我更改一列的大小,其他 DG
我正在 AS3 中动态创建一个 Datagrid。在 MXML 中,可以这样写: mx:DataGridColumn dataField="abc" id="testColumn" 但是在 AS3 中
如何在 DataGridColumn 中使文本可选(以便我可以复制)? 最佳答案 创建一个带有可选标签的自定义组件,并将其分配给数据网格列的 itemRenderer 属性: DGCRenderer.
我仍然是 wpf 的初学者 - mvvm。我有一个与集合绑定(bind)的数据网格。 我需要用文本框的内容填充第一列。所以每次我添加一个新行时,第一列应该已经有我的文本框的内容。 我该怎么做? Vie
我有一个UserControl,其设计DataContext: d:DataContext="{d:DesignInstance designtime:DesignViewModel, IsDesig
我在下面定义了一个示例类: class Shops : INotifyPropertyChanged { private int _productId; private str
无论文化如何,我都需要在可编辑的 DataGridColumn 中接受 、 和 .。键入值时,它的格式设置为使用 . 作为小数点分隔符。 目前我只用: ViewModel 中的绑定(bind)属性
我在 XAML(不是 Silverlight)中使用具有可调整列大小的 DataGrid,如果用户调整屏幕大小,DataGrid 将展开。 目前,如果所有 DataGrid 列的宽度都小于 DataG
我是一名优秀的程序员,十分优秀!