C# 从DataTemplate UWP绑定UserControl DP
我有一个FlipView,显示小雕像。雕像包含一条通往其图像的路径 将此属性绑定到常规DataTemplate是可以的。(以下代码可以正常工作)C# 从DataTemplate UWP绑定UserControl DP,c#,user-controls,winrt-xaml,dependency-properties,uwp,C#,User Controls,Winrt Xaml,Dependency Properties,Uwp,我有一个FlipView,显示小雕像。雕像包含一条通往其图像的路径 将此属性绑定到常规DataTemplate是可以的。(以下代码可以正常工作) 有没有办法访问实际的Figurine对象并简单地将其路径属性绑定到我的UC的FigurinePath属性???由于没有FindAncestor,我想你唯一的希望是很少重构。下面是一个示例,希望能让您了解如何绕过这个问题: 以下是代码的主要部分: MainPage.xaml <DataTemplate> <local:MyUs
有没有办法访问实际的Figurine对象并简单地将其路径属性绑定到我的UC的FigurinePath属性???由于没有FindAncestor,我想你唯一的希望是很少重构。下面是一个示例,希望能让您了解如何绕过这个问题: 以下是代码的主要部分: MainPage.xaml
<DataTemplate>
<local:MyUserControl Width="660" Height="372" FigurinePath="{Binding Path}"/>
</DataTemplate>
<Grid>
<Canvas Width="660" Height="372">
<Image Width="660" Height="372" Source="{Binding FigurinePath}" Stretch="Uniform" />
</Canvas>
</Grid>
MyUserControlVM.cs
private ObservableCollection<MyUserControlVm> coll;
protected override void OnNavigatedTo(NavigationEventArgs e)
{
coll = new ObservableCollection<MyUserControlVm>();
coll.Add(new MyUserControlVm("http://libcloud.readthedocs.org/en/latest/_images/azure.jpg"));
coll.Add(new MyUserControlVm("http://www.nimbo.com/wp-content/uploads/windows-azure-logo-nimbo1.png"));
this.Flip.ItemsSource = coll;
base.OnNavigatedTo(e);
}
public sealed partial class MyUserControl : UserControl
{
public static readonly DependencyProperty FigurinePathProperty = DependencyProperty.Register(
"FigurinePath", typeof (Uri), typeof (MyUserControl), new PropertyMetadata(default(Uri)));
public Uri FigurinePath
{
get { return (Uri) GetValue(FigurinePathProperty); }
set { SetValue(FigurinePathProperty, value); }
}
public MyUserControl()
{
this.InitializeComponent();
(this.Content as FrameworkElement).DataContext = this;
}
}
public class MyUserControlVm
{
public Uri Path { get; set; }
public MyUserControlVm(string url)
{
Path = new Uri(url);
}
public void VmAction()
{
}
}
对于与示例相关的一些参考,这里有一个谢谢你,Mikael!我还没来得及测试它,但看起来这是唯一的方法,尽管我希望有一种更优雅的方法(通过xaml)。只是一个细节:我没有绑定到CB,因为我们直接给出了到VM的路径,DP现在没用了,不是吗?
private ObservableCollection<MyUserControlVm> coll;
protected override void OnNavigatedTo(NavigationEventArgs e)
{
coll = new ObservableCollection<MyUserControlVm>();
coll.Add(new MyUserControlVm("http://libcloud.readthedocs.org/en/latest/_images/azure.jpg"));
coll.Add(new MyUserControlVm("http://www.nimbo.com/wp-content/uploads/windows-azure-logo-nimbo1.png"));
this.Flip.ItemsSource = coll;
base.OnNavigatedTo(e);
}
<Grid>
<Canvas Width="660" Height="372">
<Image Width="660" Height="372" Source="{Binding FigurinePath}" Stretch="Uniform" />
</Canvas>
</Grid>
public sealed partial class MyUserControl : UserControl
{
public static readonly DependencyProperty FigurinePathProperty = DependencyProperty.Register(
"FigurinePath", typeof (Uri), typeof (MyUserControl), new PropertyMetadata(default(Uri)));
public Uri FigurinePath
{
get { return (Uri) GetValue(FigurinePathProperty); }
set { SetValue(FigurinePathProperty, value); }
}
public MyUserControl()
{
this.InitializeComponent();
(this.Content as FrameworkElement).DataContext = this;
}
}
public class MyUserControlVm
{
public Uri Path { get; set; }
public MyUserControlVm(string url)
{
Path = new Uri(url);
}
public void VmAction()
{
}
}