2016-09-16 4 views
0

Ich bin neu in WPF und stapeln mit Problem. Ich habe Gitter mit DataContext Bindung an ListView ausgewählten Artikel. Es funktioniert, wenn alles in einer XAML-Datei ist. Wie kann ich die Bindung nach dem Verschieben des Gitters in UserControl speichern?Bind UserControl zu MainWindow Element in WPF

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> 

Mainwindow:

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

Antwort

1

Sie können nicht. booksGrid existiert nicht im Kontext des Benutzersteuerelements.

Stattdessen deklarieren eine DependencyProperty (Snippet propdp) auf der 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)); 

Jetzt können Sie Ihre ausgewählten Wert binden:

Mainwindow:

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

In dem Usercontrol selbst Sie sollten die richtigen Eigenschaften im Callback der Eigenschaft für geänderte Eigenschaften der Abhängigkeitseigenschaft manuell festlegen. Die Bindung an die code -Eigenschaft ist unsicher, da der Setter für sie niemals vom Framework aufgerufen wird.

Verwandte Themen