2

これは信じられないほど簡単だと思いますが、私はあちこちを検索しましたが、答えが見つからないようです。のにDataGridTemplateColumnない値を表示するために使用したいがDataContextありDataGridます。つまり、文化に基づいて異なる名前を持つエンティティがあります。グリッドがロードされたら、現在のカルチャに基づいて適切な名前を取得します。sについて何かを見るたびにDataGridTemplateColumn、それらは常にBinding構文を使用しています。ここではできません。次のXAMLの「nameValue」TextBlockにアクセスするために必要なC#コードと、どのイベントハンドラーでアクセスする必要がありますか。

<Datagrid:DataGridTemplateColumn Header="Name" x:Name="nameField">
    <Datagrid:DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <StackPanel>
                <TextBlock x:Name="nameValue" />
            </StackPanel>
        </DataTemplate>
    </Datagrid:DataGridTemplateColumn.CellTemplate>
</Datagrid:DataGridTemplateColumn>

よろしくお願いします。スーパーn00bの質問でごめんなさい。

4

1 に答える 1

1

バインド構文は引き続き使用できます。グリッドのデータ コンテキストではなく、静的メソッドにバインドするだけでよいようです。ここに良い参照がありますhttp://blog.mrlacey.co.uk/2011/03/binding-to-static-classes-in-windows.htmlそれを例として取り上げ、ケースに合わせて変更します。

最初に、通常どおりにグリッドを設定します。項目のソースと列、標準のデータ バインディングを行います。これにより、データベースまたはその他のソースから必要な列が処理されます。

2番目:プロジェクトに静的クラスを追加します

namespace StaticBinding
{
        public class MyStaticClass
        {   
            private static string myStaticProperty;
            public static string MyStaticProperty
                {
                    get
                    {    return 
                            (CultureInfo.CurrentCulture.Name == "en-US" ? "US" : "Other");
                    }
                set { myStaticProperty = value; } }
        }
} 

3 番目:新しいリソースをアプリ リソースに追加する

 <Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
         xmlns:SampleData="clr-namespace:Expression.Blend.SampleData.SampleDataSource" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" 
         x:Class="SilverlightApplication28.App"
         xmlns:myns="clr-namespace:StaticBinding"
         >
<Application.Resources>
    <myns:MyStaticClass x:Name="MyStaticClass"></myns:MyStaticClass>
</Application.Resources>

最後に:でバインディングを設定しTextBlockます。プロジェクトをビルドした場合は、バインディング エディター ウィンドウでプロパティを確認できるはずです。

   <sdk:DataGrid AutoGenerateColumns="False" Height="171" HorizontalAlignment="Left" Margin="61,53,0,0" Name="dataGrid1" VerticalAlignment="Top" Width="263" ItemsSource="{Binding Collection}" LoadingRow="dataGrid1_LoadingRow"   Loaded="dataGrid1_Loaded"     >
        <sdk:DataGrid.Columns>
            <sdk:DataGridTextColumn Binding="{Binding Property1}" Header="Property1"/>
            <sdk:DataGridCheckBoxColumn Binding="{Binding Property2}" Header="Property2"/>
            <sdk:DataGridTextColumn Binding="{Binding Property3}" Header="Property3"/>
            <sdk:DataGridTemplateColumn>
                <sdk:DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <StackPanel>
                            <TextBlock x:Name="nameValue" Text="{Binding Source={StaticResource MyStaticClass}, Path=MyStaticProperty}" />
                        </StackPanel>
                    </DataTemplate>
                </sdk:DataGridTemplateColumn.CellTemplate>
            </sdk:DataGridTemplateColumn>
        </sdk:DataGrid.Columns>
    </sdk:DataGrid>
于 2011-05-24T01:29:07.093 に答える