我有一个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)。这是我的DependencyProperty
的UserControl
。一个更笼统的问题,如何将DependencyProperty
中的UserControl
和ViewModel
中的ItemsSource
都绑定到DataTemplate?
来源Csharp Code。
给UserControl元素一个名称:
<UserControl x:Class="WhateverYourNamespaceIs.PlaylistControl"
...
x:Name="Foo">
将绑定绑定到具有该名称的元素:
<local:PlaylistControlItem DataContext="{x:Bind}" ShowAlbumText="{Binding ElementName=Foo, Path=ShowAlbumText}">