C# UWP DependencyProperty绑定和DataTemplate绑定
我有一个C# UWP DependencyProperty绑定和DataTemplate绑定,c#,xaml,uwp,win-universal-app,dependency-properties,C#,Xaml,Uwp,Win Universal App,Dependency Properties,我有一个playlymontrol(它是一个UserControl),其中一个变量ShowAlbumText声明如下: public bool ShowAlbumText { get => (bool)GetValue(ShowAlbumTextProperty); set => SetValue(ShowAlbumTextProperty, value); } public static readonly Depend
playlymontrol
(它是一个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));
<ListView>
<ListView.ItemTemplate>
<DataTemplate x:DataType="data:Music">
<local:PlaylistControlItem DataContext="{x:Bind}" ShowAlbumText="{Binding ShowAlbumText}">
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
并且ShowAlbumText
在ListView.ItemTemplate
的xaml中以以下方式使用PlayControl
:
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));
<ListView>
<ListView.ItemTemplate>
<DataTemplate x:DataType="data:Music">
<local:PlaylistControlItem DataContext="{x:Bind}" ShowAlbumText="{Binding ShowAlbumText}">
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
但是,此绑定
报告一个错误
错误:BindingExpression路径错误:“ShowAlbumText”属性不正确
在“SMPlayer.Models.Music”中找到。绑定表达式:
Path='ShowAlbumText'DataItem='SMPlayer.Models.Music';目标元素
是“SMPlayer.Controls.playControlItem”(Name='null');目标
属性为“ShowAlbumText”(类型为“Boolean”)
那么,如何将ShowAlbumText
绑定到playControlItem
?我理解ShowAlbumText
不是Music
的属性(Music
是我的视图模型)。它是myUserControl
的DependencyProperty
。更一般的问题是,如何将我的UserControl
中的dependencProperty
和ItemsSource中的ViewModel
绑定到数据模板
来源
源。可以使用ElementName将绑定点绑定到XAML中元素的属性,而不是数据上下文的属性。在您的例子中,您希望该元素是UserControl/playControl
为UserControl元素指定一个名称:
<UserControl x:Class="WhateverYourNamespaceIs.PlaylistControl"
...
x:Name="Foo">
将绑定指向具有该名称的元素:
<local:PlaylistControlItem DataContext="{x:Bind}" ShowAlbumText="{Binding ElementName=Foo, Path=ShowAlbumText}">
为页面指定一个列表视图的名称,如下所示
<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>