在ResourceDictionary中的ItemTemplate中绑定

时间:2012-03-28 08:21:09

标签: xaml binding datatemplate microsoft-metro resourcedictionary

我正在开发一个C ++ Metro风格的应用程序,并且在ListView(或其项目)的ItemTemplate内部存在绑定问题。如果我在我的Page.xaml中做到了它就可以了。 (简化)代码将是:

<ListView x:Name="m_listParts" ItemsSource="{Binding PartsList}>
    <ListView.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal" Width="60" Height="60">
                <Grid>
                    <TextBlock Text="{Binding Part}"/>
                </Grid>                      
            </StackPanel>
        </DataTemplate>
    </ListView.ItemTemplate>
   <ListView.ItemsPanel>
            <ItemsPanelTemplate>
                <StackPanel Orientation="Horizontal"/>
            </ItemsPanelTemplate>
   </ListView.ItemsPanel>
</ListView>

但是,我想在resourceDictionary中使用ItemTemplate定义。但我无法弄清楚如何使绑定工作。它似乎再也找不到绑定属性了。

这是我的(简化)尝试(因为ItemsPanel正在工作,我想我正确地加载了字典本身):

<Style x:Key="PartsListListView" TargetType="ListView">
    <Setter Property="ItemsPanel">
        <Setter.Value>
            <ItemsPanelTemplate>
                <StackPanel Orientation="Horizontal"/>
            </ItemsPanelTemplate>
        </Setter.Value>
    </Setter>
    <Setter Property="ItemTemplate">
        <Setter.Value>
            <DataTemplate>
                <StackPanel Orientation="Horizontal" Width="60" Height="60">
                    <Grid>
                        <TextBlock Text="{Binding Part}"/>
                    </Grid>                       
                </StackPanel>
            </DataTemplate>
        </Setter.Value>
    </Setter>     
</Style>

PartsList是一个可观察的向量,包含PartViewItem对象,它由Part属性组成。

1 个答案:

答案 0 :(得分:2)

你应该把你的Xaml写成

<ListView 
    ItemsPanel="{StaticResource MyItemsPanel}" 
    ItemTemplate="{StaticResource MyItemTemplate}" .../>

你有资源

<UserControl.Resources>
  <DataTemplate x:Key="MyItemTemplate" DataType="{x:Type MyItemType}">
     <StackPanel ....
  </DataTemplate>

  <ItemsPanelTemplate x:Key="MyItemsPanel">
     <StackPanel...
  </ItemsPanelTemplate>
</UserControl.Resources>