2016-03-21 5 views
0

xamlで辞書を使用してListViewのリストビューを作成しようとしましたが、方法がわかりません。辞書のキーとしてバインディングから渡された値

私は辞書があります。

public Dictionary<string, float> dictionary {get;set;} 

そして

言っ辞書内のキー値の名前を含む
ObservableCollection<string> Parameters{get; set;} 

を。

私は

ようになるのItemsSourceと DataTemplateとして
itemsSource = "{Binding Parameters}" 

そして、リストビューとListView持っている:私はてmanualyユーザーとして辞書の唯一の選択された値とリストビューを作成カント

itemsSource= "{Binding dictionary[Passed_Value]}" 

が選択できますそれは表示するものであり、そのうち10個があります。

答えて

0

あなたの質問は理解するのが非常に難しいです。だから、私はリストのリストを作成することを実証すると思った。このコードビハインドから始める。

public class Level1 
{ 
    public int Key { get; set; } 
    public string Name { get; set; } 
    public IEnumerable<Level2> Items { get; set; } 
} 

public class Level2 
{ 
    public int Key { get; set; } 
    public string Name { get; set; } 
} 

public IEnumerable<Level1> Items 
{ 
    get 
    { 
     return Enumerable.Range(1, 10) 
      .Select(x => new Level1 
      { 
       Key = x, 
       Name = $"Level 1 Item {x}", 
       Items = Enumerable.Range(1, 10) 
        .Select(y => new Level2 
        { 
         Key = y, 
         Name = $"Level 2 Item {y}", 
        }) 

      }); 
    } 
} 

そして、このXAML:

<ListView ItemsSource="{x:Bind Items}"> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <StackPanel> 
       <TextBlock Text="{Binding Name}" /> 
       <ItemsControl ItemsSource="{Binding Items}" Margin="12,0,0,0"> 
        <ItemsControl.ItemTemplate> 
         <DataTemplate> 
          <StackPanel> 
           <TextBlock Text="{Binding Name}" /> 
          </StackPanel> 
         </DataTemplate> 
        </ItemsControl.ItemTemplate> 
       </ItemsControl> 
      </StackPanel> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 

次のようになります。私は、ネストされたリストビューを変更し、そのそれぞれの入れ子のコントロールので、それItemsControlに行われますのでご注意ください

enter image description here

あなたは本当の悪夢を引き起こす可能性があります。それ以外は、これがそれです。辞書が必要なのかどうかは確かではありませんが、辞書にバインドすることは確かに可能です。

幸運のベスト。

+0

答えをありがとう:D実際に答える!私の望むものではありませんが、私のデータモデルにほとんど変更を加えることなく、すべてがうまくいくでしょう。おかげさまで! –

2

また、Bindingを使用して辞書にアクセスする方法を知りたいこともあります。あなたは、私が実際にキーを使用して辞書にアクセスするわけではないことがわかります

<ListView ItemsSource="{x:Bind Items}"> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <TextBlock> 
       <Run Text="{Binding Key}" /> 
       <Run Text="=" /> 
       <Run Text="{Binding Value}" /> 
      </TextBlock> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 

public Dictionary<string, double> Items 
{ 
    get 
    { 
     var d = new Dictionary<string, double>(); 
     foreach (var item in Enumerable.Range(1, 10)) 
     { 
      d.Add($"Key{item}", item); 
     } 
     return d; 
    } 
} 

そして、このXAML:このコードを使用して

。キーがバインディングによってのみ分かっている場合、キーで辞書にアクセスする方法はありません。つまり、バインディングをバインディングに渡すことはできません。

<StackPanel DataContext="{Binding ElementName=ThisPage}"> 
    <TextBlock Text="{Binding Items[Key1]}" /> 
</StackPanel> 

しかし、もちろん、これはあなたが事前にキーを知っているし、それに結合していない必要があります。ここでは

は、あなたが何ができるかです。 WinRT-XAMLにはマルチバインディングはありません。

私はこれが混乱を解消することを望みます。

関連する問題