我认为这会非常简单,但我已经搜遍过,似乎无法找到答案。我有一个DataGridTemplateColumn
,我想用它来显示不在DataContext
的{{1}}中的值。即我有一个根据文化有不同名称的实体。当网格加载时,我想根据当前文化获取适当的名称。每当我看到DataGrid
s的任何内容时,他们总是使用Binding语法。我不能在这做到这一点。在下面的XAML中访问“nameValue”TextBlock需要哪些C#代码,以及我应该在什么样的事件处理程序中访问它:
DataGridTemplateColumn
感谢所有提前,我很抱歉超级n00b问题。
答案 0 :(得分: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>