0

我有一个带有 DataGrid 的窗口。我的DataGrid 处理BeginningEdit 事件。我想根据列的名称运行一些可能取消BeginningEdit 事件的代码。例如:

private void tickerGrid_BeginningEdit(object sender, DataGridBeginningEditEventArgs e) {
    e.Cancel = (string)e.Column.Header != "Name";
}

我的 DataGridTemplateColumn 标记看起来像:

<DataGridTemplateColumn Header="Name" IsReadOnly="False">

我想将“名称”作为常数存储在某处。我怎样才能做到这一点?我尝试制作一个公共 String 属性并像这样绑定 DataGridTemplateColumn Header:

<DataGridTemplateColumn Header="{Binding Path=ColName}" IsReadOnly="False">

但我认为 DataContext 是不同的,因为这对我不起作用。

如何创建一个对我的 C# 代码和 DataGridTemplateColumn 标题都可用的常量字符串?

4

2 回答 2

1

创建一个静态类

public static class Constants
{
    public const string ColName = "ColName";
}

在您的 xaml 文件顶部添加命名空间引用:

xmlns:customNamespace="clr-namespace:Namespace.Of.Your.Constants.Class"

添加您的绑定:

<DataGridTemplateColumn Header="{Binding Path=ColName, Source={x:Static customNamespace:Constants}" IsReadOnly="False">
于 2013-03-22T16:05:28.797 回答
1

试试这个(根据我们之前的讨论发布)......

Header="{x:Static yourNamespace:Constants.ColName}"

(并且Constants.ColName基于@mathieu 的回答 - 只需在代码中的任何位置定义一个具有静态属性的类 - 并获得正确的命名空间)

基本上你不需要Binding,因为你拥有的是一个 const 字符串,所以最简单的事情就是使用x:Static. (并且您可以在需要的地方添加类似的属性)。

另一种方法是在某处的 XAML 中“构造”一个​​字符串对象并使用StaticResources它。但这似乎更容易——你可以为类似的事情保留一个全局静态类。

于 2013-03-22T19:21:24.393 回答