UWP DependencyProperty绑定和DataTemplate绑定

问题描述 投票:0回答:1

我有一个PlaylistControl(它是一个UserControl),并且以这种方式声明了一个变量ShowAlbumText

    public bool ShowAlbumText
    {
        get => (bool)GetValue(ShowAlbumTextProperty);
        set => SetValue(ShowAlbumTextProperty, value);
    }
    public static readonly DependencyProperty ShowAlbumTextProperty = DependencyProperty.Register("ShowAlbumText", 
                        typeof(bool),
                        typeof(PlaylistControl),
                        new PropertyMetadata(true));

并且ShowAlbumText用于ListView.ItemTemplate的xaml中的PlaylistControl

<ListView>
    <ListView.ItemTemplate>
        <DataTemplate x:DataType="data:Music">
            <local:PlaylistControlItem DataContext="{x:Bind}" ShowAlbumText="{Binding ShowAlbumText}">
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

但是,此Binding报告错误

错误:BindingExpression路径错误:'ShowAlbumText'属性不正确在“ SMPlayer.Models.Music”上找到。 BindingExpression:Path ='ShowAlbumText'DataItem ='SMPlayer.Models.Music';目标元素是'SMPlayer.Controls.PlaylistControlItem'(Name ='null');目标属性为“ ShowAlbumText”(类型为“ Boolean”)

那么如何将ShowAlbumText绑定到PlaylistControlItem?我了解 ShowAlbumText是[[NOT的Music的属性(Music是我的ViewModel)。这是我的DependencyPropertyUserControl。一个更笼统的问题,如何将DependencyProperty中的UserControlViewModel中的ItemsSource都绑定到DataTemplate?

来源XAML

来源Csharp Code

c# xaml uwp win-universal-app dependency-properties
1个回答
0
投票
您可以使用ElementName来绑定指向XAML中元素的属性,而不是数据上下文的属性。对于您的情况,您希望该元素为UserControl / PlaylistControl。

给UserControl元素一个名称:

<UserControl x:Class="WhateverYourNamespaceIs.PlaylistControl" ... x:Name="Foo">

将绑定绑定到具有该名称的元素:

<local:PlaylistControlItem DataContext="{x:Bind}" ShowAlbumText="{Binding ElementName=Foo, Path=ShowAlbumText}">

© www.soinside.com 2019 - 2024. All rights reserved.