繁体   English   中英

另一个TabItem内的TabItems中的usercontrol的数据上下文

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM