2016-09-16 108 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}"/> 

在用戶控件本身您應該手動設置屬性更改回調的依賴項屬性中的正確屬性。綁定到代碼屬性是不安全的,因爲它的設置者永遠不會被框架調用。