2016-04-07 2 views
1

ich ein prob konfrontiert, wo ich kann keinen Wert von meinem Viewmodel zu binden scheinen .. Der Code so etwas wie dieses ..WPF (XAML - Datenbindung - Finden Vorfahr)

<telerik:RadGridView 
     ... 
     DataContext = "{Binding thisViewModel}" 
     ItemSource = "{Binding item1}" 
     ... > 

    <telerik:RadGridView.Columns> 
     <telerik:GridViewDataColumn 
      .... 
      DataMemberBinding = "{Binding insideItem1}"> 

     <telerik:GridViewDataColumn.Header> 

      <Run Text = "{Binding Path = DataContext.item2, 
           RelativeSource = {RelativeSource Mode=FindAncestor, 
            AncestorType="{x:Type telerik:RadGridView"}, 
            AncestorLevel = 1}}"/> 

       ..... 

     </<telerik:GridViewDataColumn> 

derjenige, der hat das Bindungsproblem ist die item2 innerhalb der "Run Text" Teil. item2 ist eine weitere Eigenschaft innerhalb thisViewModel wie item1. Kann mich jemand in dieser Angelegenheit aufklären? Vielen Dank im Voraus :)

+0

sehen Sie einen verbindlichen Fehler im Ausgabefenster? – Nitin

+0

Nein, da ist nicht .. es füllt einfach nicht den Wert .. Ich habe es auf meiner ViewModel Seite überprüft .. Die Eigenschaft hat den Wert, den ich auch möchte – DriLLFreAK100

Antwort

0

Ich mag würde vorschlagen, dass Sie Ihre Viewmodel als Static definieren, dann binden sie auf diese Weise:

<Run Text = "{Binding Path=DataContext.item2 Source={StaticResource MyDataContext}}"/> 

Hoffe, es hilft! Ich wünsche ihnen einen wunderbaren Tag!

+0

Interessante Idee. Schöne, saubere Art, mit Ahnenbindungen umzugehen. – Tone

+0

Ich würde nur bemerken, dass es geändert werden sollte, um '. Wenn der DataContext (ViewModel) als MyDataContext definiert ist, wird er im Pfad nicht benötigt. – Tone

+0

Vielen Dank für den Vorschlag, werde einen Blick darauf werfen ... aber ich bin mehr daran interessiert zu verstehen, warum nicht die oben genannten verbindlichen funktioniert .. Würde mich freuen, wenn jemand darauf hinweisen könnte :) – DriLLFreAK100

0

Sie haben ein fehlendes Komma und einige unnötige (und leicht verworrene) Anführungszeichen. Außerdem kann das Run-Element nicht so verwendet werden, wie ich es verstehe, sondern sollte in etwas wie einem TextBlock oder einem Absatz in einem FlowDocument enthalten sein. Eine korrigierte Version des Codes ist

<TextBlock> 
    <Run Text="{Binding Path=DataContext.item2, 
        Mode=OneWay, 
        RelativeSource={RelativeSource Mode=FindAncestor, 
         AncestorType={x:Type telerik:RadGridView}, 
         AncestorLevel=1}}"/> 
</TextBlock> 

Wenn Sie Notwendigkeit der Run Funktionalität nicht speziell haben, müssen Sie nur einen Textblock auf seinem eigenen

<TextBlock Text="{Binding Path=DataContext.item2, 
       RelativeSource={RelativeSource Mode=FindAncestor, 
        AncestorType={x:Type telerik:RadGridView}, 
        AncestorLevel=1}}"/> 

Eine etwas einfachere Alternative verwenden könnte, wenn es funktioniert mit Ihrem Layout ist

<TextBlock Text="{Binding Path=DataContext.item2, 
      RelativeSource={RelativeSource AncestorType={x:Type telerik:RadGridView}}}"/> 
+0

haha ​​.. bemerkte etwa das Komma ... Aber es funktioniert nicht:/ – DriLLFreAK100

+0

Ich kann nicht denken, was das Problem sein könnte. Der Code, den ich gepostet habe, ist definitiv eine gültige Bindung für eine Text-Eigenschaft. Ich kenne die Run-Klasse nicht wirklich - bist du sicher, dass du sie richtig benutzt? Versuchen Sie, den Run zu einem TextBlock zu ändern, und sehen Sie, ob das angezeigt wird, es sollte zumindest beweisen, ob die Bindung funktioniert. – Tone

+0

Ich habe einen Blick darauf geworfen und wie ich es verstehe, muss die Run-Klasse in einem anderen Element wie einem TextBlock, Absatz eines FlowDocument, usw. enthalten sein. Ich werde meine Antwort aktualisieren - versuchen Sie die neue. – Tone