2016-05-03 10 views
0

In meiner Anwendung habe ich eine Benutzersteuerung namens "ChannelControls" sechs Mal in sechs verschiedenen TabItems platziert. Das Ganze ist in einer anderen Tabcontrol enthalten. Also im Grunde zwei Ebenen von TabControls.Datacontext von usercontrol in TabItems innerhalb eines anderen TabItems

Aber seit ich das gemacht habe, bleiben alle Eigenschaften leer und geben nichts aus. Ich denke, das ist ein Datenkontextproblem.

Datacontext für das Benutzersteuerelement:

public partial class ChannelControls : UserControl 
{ 
    public ChannelControls() 
    { 
     InitializeComponent(); 
     this.DataContext = this; 
    } 

eines seiner Eigenschaft:

public static readonly DependencyProperty VidTranslateNamesProperty = 
DependencyProperty.Register("VidTranslateNames", typeof(ObservableCollection<string>), typeof(ChannelControls)); 
[Bindable(true)] 
public ObservableCollection<string> VidTranslateNames 
{ 
    get { return (ObservableCollection<string>)this.GetValue(VidTranslateNamesProperty); } 
    set { this.SetValue(VidTranslateNamesProperty, value); } 
} 

Dies ist, wie die Usercontrol in einem der TabItems platziert:

<Grid Grid.Row="1"> 
     <TabControl x:Name="MainBoard" Style="{DynamicResource BaseTabControlStyle}" TabStripPlacement="Top" HorizontalContentAlignment="Center"> 
      <TabItem x:Name="Channels" Header="CHANNELS" Style="{DynamicResource BaseTabItemStyle}" Background="{x:Null}" FontFamily="Bebas Neue Book" Margin="0" Height="30" Width="100" VerticalAlignment="Top" d:LayoutOverrides="Height"> 
         <Grid x:Name="ChannelsContent" Margin="4, 4, 4, 4" DockPanel.Dock="Left"> 
          <TabControl x:Name="ContentSelector" Style="{DynamicResource BaseTabControlStyle}" TabStripPlacement="Right" HorizontalContentAlignment="Center"> 
           <TabItem x:Name="Channel0" IsSelected="True" Header="1" Style="{DynamicResource BaseTabItemStyle}" Height="45" Width="25" Background="{x:Null}" FontFamily="Bebas Neue Book"> 
            <CMiX:ChannelControls Tag="0" VidTranslateNames="{Binding VideoTranslateNames, ElementName=cmix, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/> 
           </TabItem> 
          </TabControl> 
         </Grid> 
        </TabItem> 
       </TabControl> 
      </Grid> 
+0

Wo ist die Eigenschaft "VideoTranslateNames"? –

+0

Dieser ist von der usercontrol mit ChannelsControls – lecloneur

+0

Führen Sie Ihre App, gehen Sie zu View-> Ausgabe und die letzten 10 Zeilen auf Ihre Frage, –

Antwort

0

hmm warum Sie haben dort:

Elementname = cmix

ich mit statischer Eigenschaft hauptsächlich wie folgt arbeiten:

 private static DependencyProperty _VidTranslateNamesProperty; 

     public static event EventHandler VidTranslateNamesPropertyChanged; 

     public static double VidTranslateNamesProperty 
     { 
      get { return _VidTranslateNamesProperty; } 
      set 
      { 
       _VidTranslateNamesProperty = value; 
       RaiseVidTranslateNamesPropertyChanged(); 
      } 
     } 



     public static void RaiseVidTranslateNamesPropertyChanged() 
     { 
      EventHandler handler = VidTranslateNamesPropertyChanged; 
      if (handler != null) 
       handler(null, new EventArgs.Empty); 
     } 

dann binden Sie es wie

DependencyProperty ="{Binding Path=(local:Class.VidTranslateNamesProperty)}" 
+0

ElementName = cmix ist der usercontrol, der ChannelsControls – lecloneur

+0

trotzdem enthält ... Meiner Meinung nach löst Problem geändertes Ereignis. – spred

+0

ok, aber wenn meine Benutzersteuerung in nur einem tabitems war und nicht wie jetzt, bedeutet Tabcontrol in einem anderen. Ich hatte keine Probleme – lecloneur

0

OK, um das Problem gefunden. Da ich den Namen des übergeordneten Benutzersteuerelements geändert habe, habe ich vergessen, ElementName überall dort zu ändern, wo ich Eigenschaften binde. Da VisualStudio keinen Fehler ausgelöst hat, brauchte ich Zeit, um es zu finden ...

Danke trotzdem für die Hilfe.