繁体   English   中英

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

[英]WPF: How to bind and update display with DataContext

我正在尝试执行以下操作:

我有一个带有几个选项卡的TabControl。 每个TabControlItem.Content都指向PersonDetails,后者是一个UserControl。每个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,并让按钮更改属性值而没有任何代码(如果可能)。

任何帮助将不胜感激。

您可以通过使用ElementName绑定直接绑定到TabControl的SelectedItem来完成所需的操作:

<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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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