如何为代码和DataGrid提供常量字符串?

时间:2013-03-22 16:00:45

标签: c# wpf binding wpfdatagrid datacontext

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

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

我的DataGridTemplateColumn标记如下所示:

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

我想存储&#34;姓名&#34;作为某个地方的常数。我怎样才能做到这一点?我尝试制作一个公共String属性并绑定DataGridTemplateColumn Header,如下所示:

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

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

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

2 个答案:

答案 0 :(得分: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">

答案 1 :(得分:1)

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

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

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

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

替代方案也是在某个地方“构造”XAML中的字符串对象,并使用StaticResources。但这似乎更容易 - 你可以为类似的东西保留一个全局静态类。