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">

「名前」を定数としてどこかに保存したいのですが。これどうやってするの?パブリック文字列プロパティを作成し、次のようにDataGridTemplateColumnヘッダーをバインドしてみました。

<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の答えに基づいています-コード内の任意の場所に静的プロパティを持つクラスを定義するだけです-そして名前空間を正しく取得します)

基本的に、持っているのはconst文字列であるため、必要ありません。Binding最も単純なのは、を使用することx:Staticです。(そして、必要に応じてそのようなプロパティを追加できます)。

別の方法は、XAMLのどこかに文字列オブジェクトを「構築」してそれを使用StaticResourcesすることです。しかし、これは簡単なようです。同様のことのためにグローバル静的クラスを保持できます。

于 2013-03-22T19:21:24.393 に答える