2016-09-16 4 views
0

私はWPFで新しく問題をスタックしています。私はDataContextとグリッドを持っていますListView選択項目にバインドします。 1つのXAMLファイルにすべてが含まれている場合の作業です。 UserControlにグリッドを移動した後にバインディングを保存するにはどうすればよいですか?WPFのMainWindow要素にUserControlをバインドします

ユーザーコントロール:

<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}"/> 

をユーザーコントロール自体で依存関係プロパティのプロパティ変更コールバックに正しいプロパティを手動で設定する必要があります。コード・プロパティへのバインドは、フレームワークによって決して呼び出されないため、安全ではありません。

関連する問題