문제

나는 만들려고 노력하고있다 AttachedProperty a DataGridColumn Silverlight 3.0 내에서 몇 가지 문제가 있습니다.

다음은 AttachedProperty입니다.

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 클래스의 헤더 속성이 구속 될 수 없다는 제한을 극복하려고합니다.

이 xaml은 예상대로 작동합니다 ...

<Controls:DataGridTextColumn Binding="{Binding OwnerName}"                                                                         
                         HeaderStyle="{StaticResource DataGridColumnHeaderStyle}"

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

그러나이 XAML은 오류를 던진다. )

<Controls:DataGridTextColumn Binding="{Binding OwnerName}"                                                                         
                         HeaderStyle="{StaticResource DataGridColumnHeaderStyle}"

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

실험을 위해서는이 속성 (위의 바인딩 구문 포함)을 DataGrid 그리고 확인했다 DataGridColumnHelper.Header 속성 OnHeaderPropertyChanged 방법과 값은 정확했습니다 (예외는 발생하지 않았습니다)

AttachedProperty가 첨부 된 대상은 DependencyProperty. 반사판을 통해, DataGridColumn (어떤에서 DataGridTextColumn 파생) 파생 DependencyProperty.

누군가 이것에 대해 약간의 빛을 흘릴 수 있습니까? 응용 프로그램을 현지화하려고 노력하고 있으며 Datagrid에 문제가 있습니다. 나는 코드-비만에서 이것을 할 수 있다고 확신하지만, 그것을 피하려고 노력하고 있습니다.

도움이 되었습니까?

해결책

Chris, 문제는 매우 간단합니다. DataGridTextColumn이 시각적 트리에서 "분리"되기 때문에 작동하지 않습니다. DataGridTextColumn 객체는 Datagrid의 열에 루팅되어 있습니다. 간접 참조. 따라서 첨부 된 속성조차도 예상대로 작동하지 않습니다. 이제 첨부 된 바인딩이라고 부르는 것을 사용 하여이 모든 작업을 수행 할 수있는 방법이 있습니다.

http://www.ordtane.com/blog/post/2009/09/29/introoping-nroutetoolkit-for-silverlight-(part-i).aspx

VisualTree에있는 것을 사용하여 바인딩 속성을 첨부하는 것을 잊지 마십시오 (열을 고정하는 그리드는 괜찮습니다.)

도움이 되었기를 바랍니다.

다른 팁

이것을 사용해보십시오. 사용자 이름이 뷰 모델의 속성이라고 가정합니다.

    <Controls:DataGridTextColumn Binding="{Binding OwnerName}"                                                                         
HeaderStyle="{StaticResource DataGridColumnHeaderStyle}"
Behaviors:DataGridColumnHelper.Header="{Binding UserName}"/>

시나리오를 테스트 할 수 없으므로 내 게시물은 아이디어 일뿐입니다. 작동하지 않을 수도 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top