【问题标题】:Edit DataGridTemplateColumn in Code Behind?在后面的代码中编辑 DataGridTemplateColumn?
【发布时间】:2011-04-06 19:48:37
【问题描述】:

我认为这将非常简单,但我已经搜索了所有内容,似乎无法找到答案。我有一个DataGridTemplateColumn,我想用它来显示一个不在DataContextDataGrid 中的值。 IE。我有一个根据文化具有不同名称的实体。当网格加载时,我想根据当前的文化获取适当的名称。每次我看到有关DataGridTemplateColumns 的任何信息时,他们总是使用绑定语法。我在这里做不到。我需要什么 C# 代码来访问以下 XAML 中的“nameValue”TextBlock,以及我应该在什么事件处理程序中访问它:

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

在此先感谢大家,对于超级 n00b 的问题,我深表歉意。

【问题讨论】:

    标签: silverlight datagrid datagridtemplatecolumn


    【解决方案1】:

    您仍然可以使用绑定语法,听起来您只需要绑定到静态方法而不是网格的数据上下文。这里有一个很好的参考http://blog.mrlacey.co.uk/2011/03/binding-to-static-classes-in-windows.html 以它为例并根据您的情况进行修改。

    首先:像往常一样设置网格、项目源和列、标准数据绑定。这将处理您需要从数据库或其他来源获得的任何列。

    第二:在你的项目中添加你的静态类

    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; } }
            }
    } 
    

    第三:将您的新资源添加到应用资源中

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-20
      • 2017-08-28
      • 1970-01-01
      • 2011-08-28
      • 2010-12-17
      • 2012-05-11
      • 2014-02-15
      相关资源
      最近更新 更多