2016-09-16 78 views
0

我是WPF中的新成员,并且存在问题。我有DataContext的网格绑定到ListView选定的项目。它在一个XAML文件中工作。如何在UserControl中移动网格后保存装订?将UserControl绑定到WPF中的MainWindow元素

用户控件:

<UserControl x:Class="Books.Views.BookView" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      xmlns:local="clr-namespace:Books.Views" 
      mc:Ignorable="d" 
      d:DesignHeight="300" d:DesignWidth="300"> 
    <Grid DataContext="{Binding SelectedValue, ElementName=booksGrid}"> 
... 
    </Grid> 
</UserControl> 

主窗口:

... 
<ListView x:Name="booksGrid" ItemsSource="{Binding}"> 
... 
<ContentControl Name="infoControl" 
        Grid.Row="0" 
        Grid.Column="1" 
        Content="{Binding}" /> 

回答

1

你不能。在用户控件的上下文中不存在booksGrid

相反,在UserControl

public Book Book 
    { 
     get { return (Book)GetValue(BookProperty); } 
     set { SetValue(BookProperty, value); } 
    } 

    // Using a DependencyProperty as the backing store for Book. This enables animation, styling, binding, etc... 
    public static readonly DependencyProperty BookProperty = 
     DependencyProperty.Register("Book", typeof(Book), typeof(BookView), new PropertyMetadata(null)); 

声明DependencyProperty(片段propdp)现在,您可以选择的值绑定到它:

主窗口:

<BookView Book="{Binding SelectedValue, ElementName=booksGrid}"/> 

在用户控件本身您应该手动设置属性更改回调的依赖项属性中的正确属性。绑定到代码属性是不安全的,因为它的设置者永远不会被框架调用。