[英]Datacontext of usercontrol in TabItems inside another TabItems
在我的应用程序中,我有一个名为“ ChannelControls”的用户控件,在六个不同的TabItem中放置了六次。 全部内容包含在另一个tabcontrol中。 因此,基本上是两个级别的TabControl。
但是,既然我这样做了,所有属性将保持为空并且不输出任何内容。 所以我想这是一个数据上下文问题。
UserControl的Datacontext:
public partial class ChannelControls : UserControl
{
public ChannelControls()
{
InitializeComponent();
this.DataContext = this;
}
其属性之一:
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); }
}
这是将usercontrol放在以下选项之一中的方式:
<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>
嗯,为什么你在那里:
ElementName =混合
我使用静态属性主要是这样的:
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);
}
那么你可以像绑定
DependencyProperty ="{Binding Path=(local:Class.VidTranslateNamesProperty)}"
确定找到了问题。 因为我更改了父用户控件的名称,所以我忘记在绑定属性的任何地方都更改ElementName。 由于VisualStudio没有引发任何错误,因此我需要时间来找到它。
无论如何,谢谢您的帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.