【问题标题】:How do you access the DataContext of a ListViewItem in the style of the ListViewItem?如何以 ListViewItem 的样式访问 ListViewItem 的 DataContext?
【发布时间】:2018-03-17 16:24:22
【问题描述】:

我有一个ObservableCollection<Foo> fooList,下面是一个MasterDetailsView的代码,这只是一个更高级的ListView

<controls:MasterDetailsView
            Grid.Row="1"
            x:Name="MasterDetailsViewControl"
            ItemsSource="{x:Bind fooList}"
            SelectedItem="{x:Bind Selected, Mode=OneWay}"
            ItemTemplate="{StaticResource ItemTemplate}"
            DetailsTemplate="{StaticResource DetailsTemplate}"
            NoSelectionContentTemplate="{StaticResource NoSelectionContentTemplate}"
            BorderBrush="Transparent">
    <controls:MasterDetailsView.ItemContainerStyle>
        <Style TargetType="ListViewItem">
            <Setter Property="Background">
                <Setter.Value>
                    <Binding Path="PathToFooBrushGoesHere" />
                </Setter.Value>
            </Setter>
        </Style>
    </controls:MasterDetailsView.ItemContainerStyle>
</controls:MasterDetailsView>

每个foo 都有一个单独的属性foo.Brush,我想用它来绘制ListViewItem 的背景。我无法弄清楚我需要在PathToFooBrushGoesHere 中输入什么才能让ListViewItem 访问具有Brushfoo 的属性。

我认为通过设置不同的DataContext 可能是可行的,但我不知道如何以ListViewItem 样式访问ItemTemplateDataContext .

应该如何处理这种样式?

【问题讨论】:

    标签: c# xaml uwp uwp-xaml windows-community-toolkit


    【解决方案1】:

    你可以通过将Brush属性绑定到MasterDetailsViewItemTemplate来实现这个效果。

    首先,将MasterDetailsView.ItemContainerStyle更改如下,将ListViewItemVerticalContentAlignmentHorizontalContentAlignment属性设置为Stretch

    <controls:MasterDetailsView.ItemContainerStyle>
        <Style TargetType="ListViewItem">
            <Setter Property="VerticalContentAlignment" Value="Stretch"/>
            <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
        </Style>
    </controls:MasterDetailsView.ItemContainerStyle>
    

    然后将Brush属性绑定到MasterDetailsViewItemTemplate

    <DataTemplate x:Key="ItemTemplate" x:DataType="local:Foo">
        <Grid Background="{x:Bind Brush}">
            <TextBlock Text="ItemTemplate"/>
        </Grid>
    </DataTemplate>
    

    【讨论】:

    • 嗨微风,谢谢 - 这是我已经做的解决这个问题。但是,在我看来,这更像是一种解决方法——如果我想在 ListViewItem 上设置不同的属性怎么办?确实应该在 UWP 社区工具包中提供该功能来做到这一点?
    • @CurtisParfitt-Ford 这应该是实现这种效果的正确方法。样式中不能绑定ListViewItem的属性直接改变背景。
    • @CurtisParfitt-Ford 另请参阅迁移说明 docs.microsoft.com/en-us/uwp/api/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-31
    • 1970-01-01
    • 1970-01-01
    • 2021-06-02
    • 2017-09-13
    相关资源
    最近更新 更多