UWP DependencyProperty Binding и DataTemplate Binding - PullRequest
0 голосов
/ 03 октября 2019

У меня есть 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:.Models.Music. BindingExpression: Path = 'ShowAlbumText' DataItem = 'SMPlayer.Models.Music';целевой элемент - «SMPlayer.Controls.PlaylistControlItem» (Name = 'null');Свойство target - ShowAlbumText (тип Boolean)

Итак, как я могу связать ShowAlbumText с PlaylistControlItem? Я понимаю , что ShowAlbumText является НЕ свойством Music (Music - моя ViewModel). Это DependencyProperty из моих UserControl. Более общий вопрос, как я могу связать DependencyProperty из моего UserControl и ViewModel из ItemsSource с DataTemplate?

Source XAML .

Источник Код Csharp .

Ответы [ 2 ]

0 голосов
/ 04 октября 2019

Дайте вашей странице имя, в котором присутствует вид списка, например,

<Page
    x:Class="TestUwpApp.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:TestUwpApp"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"
    Name="MainPageName">

, а затем свойство привязки "ShowAlbumText", например,

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

0 голосов
/ 04 октября 2019

Вы можете использовать ElementName, чтобы создать точку привязки к свойству элемента в вашем XAML вместо свойства контекста данных. В вашем случае вы бы хотели, чтобы этот элемент был UserControl / PlaylistControl.

Дайте элементу UserControl Имя:

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

Укажите привязку к элементу с таким именем:

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