C# 从DataTemplate UWP绑定UserControl DP

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

我有一个FlipView,显示小雕像。雕像包含一条通往其图像的路径

将此属性绑定到常规DataTemplate是可以的。(以下代码可以正常工作)


有没有办法访问实际的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()
    {

    }
}