2015-04-28 50 views
0

我想使用DataTemplate將作爲ItemSource的Dictionary<DateTime, MyClass>綁定到StackPanel。它適用於Collection<DateTime>,但似乎無法獲得Dicitonary的語法。 下面的xaml文件的作品,如果我只是綁定類型爲DateTime字典的密鑰。但我也想訪問Value。值是MaClass類型,我需要將各個成員(FromDate,ToDate)也放入網格中。在此先感謝你們!使用其鍵和其值的成員綁定字典

.XAML文件

<DataTemplate x:Key="Mytemplate" DataType="x:Type local:MyClass"> 
    <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="Auto" /> 
      <ColumnDefinition Width="Auto" /> 
     </Grid.ColumnDefinitions> 
     <Label Grid.Column="0" Content="{Binding Key}" 
       ContentStringFormat="{}{0:dd.MM ddd}"/> 
     <!--Label Grid.Column="1" Content="{Binding Value.FromDate}" 
        ContentStringFormat="{}{0:HH:mm}"/--> 
    </Grid> 
</DataTemplate> 

... 

<ItemsControl ItemsSource="{Binding ElementName=thispage,Path=MyDictionary}" 
       ItemTemplate="{StaticResource Mytemplate}" /> 

MyClass的:

public class MyClass 
{ 
    public DateTime FromDate { get; set; } 
    public DateTime ToDate { get; set; } 
    public string ThisString { get; set; } 
    public MyClass() 
    { 
     ... 
    } 
} 
+0

是否使用MVVM?如果MyDictionary屬性的類型爲'Dictionary ',那麼你的模板是錯誤的,因爲你指定DataType爲'x:Type local:MyClass'。爲什麼在ItemsSource的綁定中使用'ElementName'? – Guerudo

+0

試試這個Path = Key – Paparazzi

+0

我就是。是的,它的類型是'Dictionary '。如何提供Dictionary <>作爲DataType的語法? – tzippy

回答

1

首先,你必須解決您的MyClass使用屬性,而不是字段,因爲你不能有一個數據綁定字段。

public class MyClass 
{ 
    public DateTime FromDate { get; set; } 
    public DateTime ToDate { get; set; } 
    public string ThisString { get; set; } 

    public MyClass() 
    { 
     ... 
    } 
} 

後來才改變你的模板,以這樣的:

<DataTemplate x:Key="Mytemplate"> 
    <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="Auto" /> 
      <ColumnDefinition Width="Auto" /> 
     </Grid.ColumnDefinitions> 
     <Label Grid.Column="0" 
       Content="{Binding Key}" 
       ContentStringFormat="{}{0:dd.MM ddd}" /> 
     <Label Grid.Column="1" 
       Content="{Binding Value.FromDate}" 
       ContentStringFormat="{}{0:HH:mm}" /> 
    </Grid> 
</DataTemplate> 

你不會有智能感知沒有DataType,但據我所知,這是不可能的XAML中定義一個通用DictionaryDataType

但是爲了克服這個問題,你可以做一個空的實現你的Dictionary類型。

public class MyDictionary : Dictionary<DateTime, MyClass> 
{ 
} 


public class Whatever 
{ 
    public MyDictionary MyDictionary { get { ... } set { ... } } 

    ... 
} 

和使用您的DataTemplate與您的新Dictionary類型:

<DataTemplate x:Key="Mytemplate" DataType="{x:Type local:MyDictionary}"> 
    ... 
</DataTemplate> 
+0

感謝您指出「MyClass」中的字段問題。這是問題。 「Key」和「Value.Property」的綁定正在按預期工作! – tzippy