2016-07-30 14 views
1

DataContextを使用して、DataTemplateのListViewItemをDataTemplateのUserControlに共有したいのですが、このタスクで2時間を費やすだけで、多くのサイトを見ていますが、 DataContextを取得したい、それはnullです。私は何をしたいかUWP DataContextからDataTemplateのUserControlへのUWP DataContext

ショートコード、:

のUserControlで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> 

では、と呼ばれる:MainWindowLinesInfoFirst

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

と、このユーザーコントロールの.csファイルに:

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

と、ここでは単純なクラスです:

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

問題は、このユーザーコントロールが呼び出されたときには常に、DataContextのは「Przystanki」ボットnullではないこと、です。

質問:このUserControlにDataContextを送信する方法?

答えて

2

UWPは何:

  1. MainWindowLinesInfoFirstコントロールを作成します。
  2. そのDataContextプロパティを必要な値に設定します。

DataContextプロパティをコンストラクタで読み取ることはできません。コントロールがまだ作成されていないため、UWPがインスタンスを作成する前にプロパティを設定する方法がないためです。

コンストラクタでDataContextChangedイベントを購読することができます。 UWPがそれを設定すると、通知されます。

+0

まだnullです。使用して 'this.DataContextChanged + =(送信者、e)=> {var a = This.DataContextとしてPrzystanki; }; 'および' ' – Niewidzialny

+0

AH!それを捕まえて!ありがとう!私はちょうど使用された議論をしなかったし、私はisntヌルかどうかをチェックしなければならなかった'var a = e.NewValue as Przystanki;'と 'if(a!= null)ChangeText(a);そして、うまく動作します!私の主人; 3 – Niewidzialny

+0

hah、新しい範囲:D – Niewidzialny

関連する問題