C# ListView内部的Metro XAML绑定

C# ListView内部的Metro XAML绑定,c#,xaml,listview,data-binding,microsoft-metro,C#,Xaml,Listview,Data Binding,Microsoft Metro,我正在使用下一个代码来显示ListView。ListView包含一个TextBlock,它的FontSize绑定到我的主页上的一个变量: <ListView x:Name="ListView" SelectionMode="Single" SelectionChanged="ListView_OnSelectionChanged" Grid.Row="1"

我正在使用下一个代码来显示ListView。ListView包含一个TextBlock,它的FontSize绑定到我的主页上的一个变量:

              <ListView x:Name="ListView"
              SelectionMode="Single"
              SelectionChanged="ListView_OnSelectionChanged"
              Grid.Row="1"
              Margin="8,16"        
              >
                <ListView.ItemTemplate>
                        <DataTemplate>
                            <StackPanel>
                                <TextBlock Text="{Binding DisplayName}"  
                   FontSize="{Binding Path=FontSizeListViewTitle}" Margin="6,0,0,0" TextWrapping="NoWrap" />
                            </StackPanel>
                        </DataTemplate>
                    </ListView.ItemTemplate>
                </ListView>

datatemplate正在列表视图项源中查找字体大小绑定,而不是整个datacontext。您可以在字体大小绑定中使用相对源,如下所示:

FontSize=“{Binding Path=DataContext.FontSizeListViewTile,RelativeSource={RelativeSource TemplatedParent}}”

我现在不在我的电脑前,所以语法可能有点不对劲,但你明白了。MS文档:


文档中没有提到祖先特性,所以我不确定WinRT库中是否提供了祖先特性

datatemplate正在列表视图项源中查找字体大小绑定,而不是整个datacontext。您可以在字体大小绑定中使用相对源,如下所示:

FontSize=“{Binding Path=DataContext.FontSizeListViewTile,RelativeSource={RelativeSource TemplatedParent}}”

我现在不在我的电脑前,所以语法可能有点不对劲,但你明白了。MS文档:


文档中没有提到祖先特性,所以我不确定WinRT库中是否提供了祖先特性

datatemplate正在列表视图项源中查找字体大小绑定,而不是整个datacontext。您可以在字体大小绑定中使用相对源,如下所示:

FontSize=“{Binding Path=DataContext.FontSizeListViewTile,RelativeSource={RelativeSource TemplatedParent}}”

我现在不在我的电脑前,所以语法可能有点不对劲,但你明白了。MS文档:


文档中没有提到祖先特性,所以我不确定WinRT库中是否提供了祖先特性

datatemplate正在列表视图项源中查找字体大小绑定,而不是整个datacontext。您可以在字体大小绑定中使用相对源,如下所示:

FontSize=“{Binding Path=DataContext.FontSizeListViewTile,RelativeSource={RelativeSource TemplatedParent}}”

我现在不在我的电脑前,所以语法可能有点不对劲,但你明白了。MS文档:


文档中没有提到祖先特性,所以我不确定WinRT库中是否提供了祖先特性

ListViewItem的DataContext是可观察集合中的对象。当在ListView的ItemTemplate中将TextBlock的文本绑定声明为
{binding DisplayName}
而不是
{binding MyList.DisplayName}
{binding MyList[0].DisplayName}
或其他任何内容时,可以看到它。和
FontSize=“{Binding FontSizeListViewTitle}”
将不起作用,因为Observable中的对象没有FontSizeListViewTitle属性

解决方案是将FontSize绑定到ListView的DataContext,在其中放置FontSizeListViewTitle属性,如下所示:

<ListView>
    <ListView.ItemTemplate>
        <DataTemplate>
            <StackPanel>
                <TextBlock Text="{Binding DisplayName}" Margin="6,0,0,0" TextWrapping="NoWrap" 
                            FontSize="{Binding Path=DataContext.FontSizeListViewTile, RelativeSource={RelativeSource AncestorType={x:Type ListView}}}" />
            </StackPanel>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

更新:

由于WinRT中缺少FindAncestor,最简单的解决方法是找到ListView,然后将FontSize绑定到ListView的DataContext

<ListView x:Name="listView">
    <ListView.ItemTemplate>
        <DataTemplate>
            <StackPanel>
                <TextBlock Text="{Binding DisplayName}" Margin="6,0,0,0" TextWrapping="NoWrap" 
                            FontSize="{Binding ElementName=listView, Path=DataContext.FontSizeListViewTile}" />
            </StackPanel>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

ListViewItem的DataContext是可观察集合中的对象。当在ListView的ItemTemplate中将TextBlock的文本绑定声明为
{binding DisplayName}
而不是
{binding MyList.DisplayName}
{binding MyList[0].DisplayName}
或其他任何内容时,可以看到它。和
FontSize=“{Binding FontSizeListViewTitle}”
将不起作用,因为Observable中的对象没有FontSizeListViewTitle属性

解决方案是将FontSize绑定到ListView的DataContext,在其中放置FontSizeListViewTitle属性,如下所示:

<ListView>
    <ListView.ItemTemplate>
        <DataTemplate>
            <StackPanel>
                <TextBlock Text="{Binding DisplayName}" Margin="6,0,0,0" TextWrapping="NoWrap" 
                            FontSize="{Binding Path=DataContext.FontSizeListViewTile, RelativeSource={RelativeSource AncestorType={x:Type ListView}}}" />
            </StackPanel>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

更新:

由于WinRT中缺少FindAncestor,最简单的解决方法是找到ListView,然后将FontSize绑定到ListView的DataContext

<ListView x:Name="listView">
    <ListView.ItemTemplate>
        <DataTemplate>
            <StackPanel>
                <TextBlock Text="{Binding DisplayName}" Margin="6,0,0,0" TextWrapping="NoWrap" 
                            FontSize="{Binding ElementName=listView, Path=DataContext.FontSizeListViewTile}" />
            </StackPanel>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

ListViewItem的DataContext是可观察集合中的对象。当在ListView的ItemTemplate中将TextBlock的文本绑定声明为
{binding DisplayName}
而不是
{binding MyList.DisplayName}
{binding MyList[0].DisplayName}
或其他任何内容时,可以看到它。和
FontSize=“{Binding FontSizeListViewTitle}”
将不起作用,因为Observable中的对象没有FontSizeListViewTitle属性

解决方案是将FontSize绑定到ListView的DataContext,在其中放置FontSizeListViewTitle属性,如下所示:

<ListView>
    <ListView.ItemTemplate>
        <DataTemplate>
            <StackPanel>
                <TextBlock Text="{Binding DisplayName}" Margin="6,0,0,0" TextWrapping="NoWrap" 
                            FontSize="{Binding Path=DataContext.FontSizeListViewTile, RelativeSource={RelativeSource AncestorType={x:Type ListView}}}" />
            </StackPanel>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

更新:

由于WinRT中缺少FindAncestor,最简单的解决方法是找到ListView,然后将FontSize绑定到ListView的DataContext

<ListView x:Name="listView">
    <ListView.ItemTemplate>
        <DataTemplate>
            <StackPanel>
                <TextBlock Text="{Binding DisplayName}" Margin="6,0,0,0" TextWrapping="NoWrap" 
                            FontSize="{Binding ElementName=listView, Path=DataContext.FontSizeListViewTile}" />
            </StackPanel>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

ListViewItem的DataContext是可观察集合中的对象。当在ListView的ItemTemplate中将TextBlock的文本绑定声明为
{binding DisplayName}
而不是
{binding MyList.DisplayName}
{binding MyList[0].DisplayName}
或其他任何内容时,可以看到它。和
FontSize=“{Binding FontSizeListViewTitle}”
将不起作用,因为Observable中的对象没有FontSizeListViewTitle属性

解决方案是将FontSize绑定到ListView的DataContext,在其中放置FontSizeListViewTitle属性,如下所示:

<ListView>
    <ListView.ItemTemplate>
        <DataTemplate>
            <StackPanel>
                <TextBlock Text="{Binding DisplayName}" Margin="6,0,0,0" TextWrapping="NoWrap" 
                            FontSize="{Binding Path=DataContext.FontSizeListViewTile, RelativeSource={RelativeSource AncestorType={x:Type ListView}}}" />
            </StackPanel>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

更新:

由于WinRT中缺少FindAncestor,因此最简单的解决方法是查找ListVie