首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Silverlight DataGridColumn AttachedProperties

Silverlight DataGridColumn AttachedProperties
EN

Stack Overflow用户
提问于 2009-10-28 02:35:19
回答 2查看 1.1K关注 0票数 0

我正在尝试为Silverlight3.0中的DataGridColumn创建一个AttachedProperty,但我遇到了一些问题。

下面是AttachedProperty:

代码语言:javascript
复制
public class DataGridColumnHelper
{
    public static readonly DependencyProperty HeaderProperty =
        DependencyProperty.RegisterAttached("Header", typeof(string), typeof(DataGridColumnHelper),
                                            new PropertyMetadata(OnHeaderPropertyChanged));

    private static void OnHeaderPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        string header = GetHeader(d);

        var dataGridColumn = d as DataGridColumn;

        if (dataGridColumn == null)
        {
            return;
        }

        dataGridColumn.Header = GetHeader(dataGridColumn);
    }

    public static string GetHeader(DependencyObject obj)
    {
        return (string)obj.GetValue(HeaderProperty);
    }

    public static void SetHeader(DependencyObject obj, string value)
    {
        obj.SetValue(HeaderProperty, value);
    }

}

正如您所看到的,它非常简单,我正在尝试克服DataGridColumn类中的Header属性不能被绑定的限制。

这个XAML按照预期工作...

代码语言:javascript
复制
<Controls:DataGridTextColumn Binding="{Binding OwnerName}"                                                                         
                         HeaderStyle="{StaticResource DataGridColumnHeaderStyle}"

                         Behaviors:DataGridColumnHelper.Header="User Name"/>

但是这个XAML抛出了一个错误...(具体地说:{System.Windows.Markup.XamlParseException: AG_E_PARSER_PROPERTY_NOT_FOUND行: 224位置: 112 at System.Windows.Application.LoadComponent(Object component,Uri resourceLocator) ....})

代码语言:javascript
复制
<Controls:DataGridTextColumn Binding="{Binding OwnerName}"                                                                         
                         HeaderStyle="{StaticResource DataGridColumnHeaderStyle}"

                         Behaviors:DataGridColumnHelper.Header="{Binding Resources.UserNameListViewHeading, Source={StaticResource Labels}}"/>

仅作为实验,我将这个属性(使用上面的绑定语法)附加到一个DataGrid,并检查OnHeaderPropertyChanged方法中的DataGridColumnHelper.Header属性,并且值是正确的(并且没有抛出异常)

我的理解是,AttachedProperty附加到的对象必须是DependencyProperty。通过反射器查看,DataGridColumn ( DataGridTextColumn派生自)派生自DependencyProperty

有人能解释一下这件事吗?我正在尝试本地化我们的应用程序,但我在使用DataGrid时遇到了问题。我确信我可以在代码隐藏中做到这一点,但我正在努力避免这一点。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-11-05 07:39:01

克里斯,问题很简单,这是行不通的,因为DataGridTextColumn是从可视化树中“分离”出来的。您的DataGridTextColumn对象以DataGrid的Columns集合为根-请参阅间接性。因此,即使是附加的属性也不会像您期望的那样工作。现在有一种方法可以使用我称之为附加绑定的东西来实现所有这些,请参见:

http://www.orktane.com/Blog/post/2009/09/29/Introducing-nRouteToolkit-for-Silverlight-(Part-I).aspx

只需记住使用VisualTree中的内容附加绑定属性(这样保存列的网格就可以了)。

希望这能有所帮助。

票数 1
EN

Stack Overflow用户

发布于 2009-10-28 18:26:13

尝试使用它,我假设UserName是视图模型中的一个属性

代码语言:javascript
复制
    <Controls:DataGridTextColumn Binding="{Binding OwnerName}"                                                                         
HeaderStyle="{StaticResource DataGridColumnHeaderStyle}"
Behaviors:DataGridColumnHelper.Header="{Binding UserName}"/>

我不能测试你的场景,所以我的帖子只是一个想法。可能行得通,也可能不行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1632803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档