了解WPF数据绑定范围

时间:2010-10-15 03:30:36

标签: wpf binding

我有一个嵌入在TabControl的TabItem中的自定义控件。 TabControl是主要Usercontrol的内容,如下所示:

<UserControl x:Class="ControlsLibrary.wpf.Alerts.UserControl1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Height="300" Width="300">
    <Grid>
        <TabControl DataContext="{Binding Filter}">
            <TabItem>
                <mc:CustomControl DataContext="{Binding Options}"
            </TabItem>
        </TabControl>
    </Grid>
</UserControl>

我的理解是我的自定义控件将继承TabControl的DataContext,因此我的自定义控件的DataContext应设置为Filter对象的“Options”属性,即TabControl的DataContext。但是,Visual Studio的输出窗口指示它正在父UserControl的DataContext中查找选项。

即使我使用Binding类的ElementName属性,我仍然无法更改自定义控件的DataContext,即使数据项的属性“Filter”实现了INotifyPropertyChanged。

我错过了什么?

TIA。

1 个答案:

答案 0 :(得分:0)

我前一段时间看到了类似的问题(但不是Tab控制问题,所以我的抱怨,如果这不起作用),我需要将CustomControl设置为控件模板TabItem

    <TabControl DataContext="{Binding Filter}">
        <TabItem>
            <TabItem.Template>
                <ControlTemplate>
                    <mc:CustomControl DataContext="{Binding Options}" />
                </ControlTemplate>
            </TabItem.Template>
        </TabItem>
    </TabControl>

实际上会影响继承层次结构中CustomControl的逻辑和视觉定位。

试试这个让我知道它是否有效

HTH