2016-07-30 22 views
1

Ich möchte ein ListViewItem von DataTemplate zu einem UserControl in DataTemplate mit DataContext teilen, ich verbringe nur zwei Stunden mit dieser Aufgabe, sah viele Seiten, aber nicht eine angeforderte Antwort finden, weil jedes Mal möchte DataContext erhalten, ist es null.UWP DataContext von DataTempalte zu UserControl in DataTemplate

Short-Code, was ich tun möchte:

In Page.xaml

<ListView Name="MainWindowLinesInfoListView1" IsItemClickEnabled="True" ItemClick="MainWindowLinesInfoListView1_ItemClick" Grid.Row="1" ItemsSource="{x:Bind pk1}" SelectionMode="Single"> 
     <ListView.ItemTemplate> 
      <DataTemplate x:DataType="data:Przystanki"> 
       <local:MainWindowLinesInfoFirst DataContext="{x:Bind self}" /> 
      </DataTemplate> 
     </ListView.ItemTemplate> 
</ListView> 

in Usercontrol genannt: MainWindowLinesInfoFirst

<Grid Margin="2" HorizontalAlignment="Center"> 
    <TextBlock x:Name="MainWindowLinesInfoListView1TextBlock" Foreground="Navy" HorizontalAlignment="Center" TextWrapping="Wrap" /> 
</Grid> 

und in CS- dieser Usercontrol:

public MainWindowLinesInfoFirst() 
{ 
    this.InitializeComponent(); 
    var a = this.DataContext as Przystanki; 
} 

und hier ist eine einfache Klasse:

public class Przystanki 
{ 
    public Przystanki self { get { return this; } } 
    public string name { get; set; } 
} 

Das Problem ist, dass immer dann, wenn eine dieser Usercontrol genannt wird, ein Datacontext null keine „Przystanki“ Bot ist.

Frage ist: Wie ein DataContext zu diesem UserControl senden?

Antwort

2

Was UWP tut:

  1. Erzeugt MainWindowLinesInfoFirst Kontrolle.
  2. Legt die Eigenschaft DataContext auf den erforderlichen Wert fest.

Natürlich können Sie DataContext Eigenschaft im Konstruktor nicht lesen, weil die Steuerung noch nicht erstellt ist, und es gibt keine Möglichkeit für UWP eine Eigenschaft festlegen, bevor eine Instanz zu schaffen.

Was Sie wollen, ist das Ereignis DataContextChanged im Konstruktor zu abonnieren. Wenn UWP es festlegt, werden Sie benachrichtigt.

+0

immer noch Null .. mit 'this.DataContextChanged + = (Absender, e) => {var a = this.DataContext als Przystanki; }; 'und' ' – Niewidzialny

+0

AH! Fang es an! Vielen Dank ! Ich habe einfach keine Argumente verwendet und ich musste überprüfen, ob es nicht null ist! 'var a = e.NewValue als Przystanki;' und 'if (a! = null) ChangeText (a);' Und funktioniert schön! Mein Meister; 3 – Niewidzialny

+0

hah, neues Sortiment: D – Niewidzialny