2009-07-29 5 views
2

Ich habe ein UserControl geschrieben, dessen DataContext eine Sammlung und eine Bool-Eigenschaft enthält. Die Sammlung wird innerhalb eines Datenrasters angezeigt (und bearbeitet), das über Kustrationsspaltenvorlagen verfügt. Der DataContext eines Steuerelements in einer Spalte ist natürlich ein Element der Auflistung des DataContext des Benutzersteuerelements. Allerdings muss ich eine Eigenschaft des Steuerelements in einer Spalte an die bool-Eigenschaft des DataContext des UserControl und nicht an das Sammlungselement binden.Ist es möglich, ein WPF-Steuerelement an mehrere Datenkontexte zu binden?

Haben Sie Ideen, wie Sie das lösen können?

Mit besten Grüßen, Oliver

Antwort

4

Ich bin auf einem anderen Beitrag dieses gerade von meiner Antwort ziehen

Getting at the "parent" of a databound object?

Hier ist der Code von der Post, dass ich denke betreffen könnte, was du zu tun versuchen, :

<ListBox Name="list" ItemsSource="{Binding Items}"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <StackPanel> 
       <TextBlock Text="{Binding}"/> 
       <ComboBox ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBox}}, Path=DataContext.Values}"/> 
      </StackPanel> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

Grundsätzlich enthält die Datacontext der List-Box in diesem Fall ein paar Listen und eine Combobox in der Datatemplate von Das ItemTemplate ist an ein anderes Mitglied des DataContext der ListBox gebunden, während die ItemsSource an den Items-Member von DataContext gebunden ist. Ich würde denken, dass dies auf Ihre DataGrid- und Spaltenvorlagen zutreffen könnte.

0

Lösung 1. Erstellen Sie eine benutzerdefinierte Klasse, die die Auflistung und eine bool-Eigenschaft enthält, und setzen Sie den DataContext auf eine Instanz dieser Klasse.

Lösung 2. Setzen Sie den DataContext des Benutzersteuerelements auf die Auflistung und fügen Sie Ihrem Benutzersteuerelement eine Bool-Eigenschaft hinzu.

XAML:

<UserControl x:Class="DataContextDemo.UserControl1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    x:Name="self"> 
    <StackPanel> 
     <ListBox ItemsSource="{Binding}" /> 
     <CheckBox IsChecked="{Binding Path=MyBoolProp, ElementName=self}" /> 
    </StackPanel> 
</UserControl> 

-Code hinter:

using System.Windows; 
using System.Windows.Controls; 

namespace DataContextDemo 
{ 
    public partial class UserControl1 : UserControl 
    { 
     public UserControl1() 
     { 
      InitializeComponent(); 
     } 

     public bool MyBoolProp 
     { 
      get { return (bool)GetValue(MyBoolPropProperty); } 
      set { SetValue(MyBoolPropProperty, value); } 
     } 

     public static readonly DependencyProperty MyBoolPropProperty = 
      DependencyProperty.Register("MyBoolProp", 
             typeof(bool), 
             typeof(UserControl1), 
             new UIPropertyMetadata(true)); 
    } 
} 
Verwandte Themen