设置多个Datacontext

时间:2011-03-06 21:09:17

标签: wpf silverlight-4.0 binding

我正在尝试找出如何在XAML页面中正确设置多个DataContexts。我有一个基本的集合,我在后面的代码中创建并设置ItemSource绑定og AutoCompleteBox。与此同时,我还有另一个datacontext在网格中设置labelsDataSource。如果我设置此datacontext,则AutoCompleteBox的itemsSource绑定将丢失。 AutoCompleteBox位于该网格中。我确实以这种方式直接将DataContext分配给了对象:

MyAutoCompleteBox.DataContext = this;

我想知道是否有更好的方法吗? 提前感谢您的帮助!

设置自动完成框:

<sdk:AutoCompleteBox x:Name="MyAutoCompleteBox" IsTextCompletionEnabled="True" ItemsSource="{Binding Items}" />

代码背后:

public IList<string> Items
    {
        get;
        private set;
    }

    public Basic_ChildWindow()
    {
        InitializeComponent();
        Items = new List<string>();
        Items.Add(@"One");
        Items.Add(@"Two");
        Items.Add(@"Three");

        DataContext = this;
    }

同一个XAML页面中的另一个datacontext,AutoCompleteBox位于该网格内:

<Grid x:Name="grdBasic_ChildWindow_Right" Style="{StaticResource GridStyle}" DataContext="{Binding Source={StaticResource LabelsDataSource}}">

1 个答案:

答案 0 :(得分:0)

我不确定我理解你的问题 - 什么是“labelsDataSource”?

但是,如果您发布的是所有代码,并且没有更多内容,只需从网格中删除datacontext / binding即可。网格不需要datacontext集(它只是一个可视容器 - 与数据无关)。

所以改变这个:

<Grid x:Name="grdBasic_ChildWindow_Right" Style="{StaticResource GridStyle}" DataContext="{Binding Source={StaticResource LabelsDataSource}}"> 

对此:

<Grid x:Name="grdBasic_ChildWindow_Right" Style="{StaticResource GridStyle}">