2016-06-13 1 views
2

ViewModelに格納されているDataTemplate内のデータをバインドしたかったのです。私はいくつかの方法を試しましたが、成功しませんでした。WPFのソリューションは、RelativeSourceのAncestorTypeプロパティのようにWinRTでは動作しないようです。ここでWinRT DataTemplate内でViewModeのデータをバインドする

<Page.DataContext> 
    <local:ViewModel x:Name="ViewModel" /> 
</Page.DataContext> 

<StackPanel Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> 
    <ListView ItemsSource="{x:Bind ViewModel.names}"> 
     <ListView.ItemTemplate> 
      <DataTemplate x:DataType="local:mydatatype"> 
       <StackPanel> 
        <TextBlock Text="{Binding Name}"/> 
        <!--Here I want a TextBlock to show the number--> 
       </StackPanel> 
      </DataTemplate> 
     </ListView.ItemTemplate> 
    </ListView> 
</StackPanel> 

は、あなたがそれらに名前を与え、その後、これを参照することにより、他のオブジェクトののDataTemplateにアクセスすることができViewModelに

public class ViewModel 
{ 
    public int Number = 42; 
    public List<mydatatype> names = new List<mydatatype>(); 
    public ViewModel() 
    { 
     names.Add(new mydatatype("name1")); 
     names.Add(new mydatatype("name2")); 
    } 
} 

public class mydatatype 
{ 
    public string Name { get; set; } 
    public mydatatype(string name) 
    { 
     this.Name = name; 
    } 
} 
+1

さらにコードを入力してください。今は十分な情報ではないからです。たとえば、私はあなたに "名前"が表示されませんViewModel –

+0

これをチェックしてください http://stackoverflow.com/questions/33070705/with-compiled-bindings-xbind-why-do-i-have-to-call- bindings-update – NotAGenie

+0

@AlexejSommer ViewModelを更新しました。ご迷惑をおかけして申し訳ありません。 – NickThomsan

答えて

0

です。このテクニックを使用すると、DataTemplate内からでも直接ViewModelにバインドするDataContextにアクセスできるはずです

<Page x:Name="PageRoot"> 
<Page.DataContext> 
    <local:ViewModel x:Name="ViewModel" /> 
</Page.DataContext> 

<StackPanel Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" x:Name="MainPanel"> 
    <ListView ItemsSource="{x:Bind ViewModel.names}"> 
     <ListView.ItemTemplate> 
      <DataTemplate x:DataType="local:mydatatype"> 
       <StackPanel> 
        <TextBlock Text="{Binding Name}"/> 
        <TextBlock Text="{Binding DataContext.Name, ElementName=PageRoot}"/> 
       </StackPanel> 
      </DataTemplate> 
     </ListView.ItemTemplate> 
    </ListView> 
</StackPanel> 
</Page> 
+0

コンピュータではないこれを今すぐテストすることができますので完璧ではないかもしれませんが試してみてから後で編集できるはずです – NotAGenie

+0

いくつかの組み合わせを試しましたが、動作するようです。あなたは私がUWPのためにこれらのバインディング関連のものをすべて学ぶことができるところから、いくつかのリソースに私を導くことができますか? – NickThomsan

+0

@NickThomsan例を更新しました。ElementNameを使用して、ベースのページ要素を設定するのと同じx:Nameを表示するようにプロパティを設定してみます。読書の面では、ジェリー・ニクソン – NotAGenie

関連する問題