代码之家  ›  专栏  ›  技术社区  ›  Amirshk

WPF:如何用DataContext绑定和更新显示

  •  0
  • Amirshk  · 技术社区  · 16 年前

    我要做的是:

    我有一个带有多个选项卡的TabControl。 每个tabControlItem.Content都指向作为用户控件的个人详细信息 每个BookDetails都有一个名为IsEditMode的依赖属性

    我希望在所选选项卡更改时更新TabControl之外名为ToggleEditButton的控件。

    我想我可以通过改变ToggleEditButton的数据上下文来做到这一点,因为它似乎不起作用(但我对WPF是个新手,所以我可能会离开)

    更改数据上下文的代码:

        private void tabControl1_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (e.Source is TabControl)
            {
                if (e.Source.Equals(tabControl1))
                {
                    if (tabControl1.SelectedItem is CloseableTabItem)
                    {
                        var tabItem = tabControl1.SelectedItem as CloseableTabItem;
                        RibbonBook.DataContext = tabItem.Content as BookDetails;
                        ribbonBar.SelectedTabItem = RibbonBook;
                    }
                }
            }
        }
    

    BookDetails下的DependencyProperty:

        public static readonly DependencyProperty IsEditModeProperty =
            DependencyProperty.Register("IsEditMode", typeof (bool), typeof (BookDetails),
                                        new PropertyMetadata(true));
        public bool IsEditMode
        {
            get { return (bool)GetValue(IsEditModeProperty); }
            set
            {
                SetValue(IsEditModeProperty, value);
                SetValue(IsViewModeProperty, !value);
            }
        }
    

    以及相关的XAML:

    <odc:RibbonTabItem Title="Book" Name="RibbonBook">
        <odc:RibbonGroup Title="Details" Image="img/books2.png" IsDialogLauncherVisible="False">
            <odc:RibbonToggleButton Content="Edit"
                Name="ToggleEditButton"
                odc:RibbonBar.MinSize="Medium" 
                SmallImage="img/edit_16x16.png"
                LargeImage="img/edit_32x32.png"
                Click="Book_EditDetails"
                IsChecked="{Binding Path=IsEditMode, Mode=TwoWay}"/>
        ...
    

    我要完成两件事,一是让按钮反映可见选项卡的IsEditMode,二是让按钮在不隐藏代码的情况下更改属性值(如果可能的话)

    任何帮助都将得到极大的重视。

    1 回复  |  直到 16 年前
        1
  •  1
  •   Andy    16 年前

    您可以通过使用 ElementName 结合:

    <odc:RibbonTabItem Title="Book" Name="RibbonBook">
        <odc:RibbonGroup Title="Details" Image="img/books2.png" IsDialogLauncherVisible="False">
            <odc:RibbonToggleButton Content="Edit"
                Name="ToggleEditButton"
                odc:RibbonBar.MinSize="Medium" 
                SmallImage="img/edit_16x16.png"
                LargeImage="img/edit_32x32.png"
                Click="Book_EditDetails"
                IsChecked="{Binding ElementName=myTabControl, Path=SelectedItem.IsEditMode, Mode=TwoWay}"/>
    

    在哪里? myTabControl 是TabControl的名称( x:Name 财产)。你不需要处理 SelectionChanged 事件更新 DataContext 按钮的