2011-03-06 81 views
0

我想了解如何在XAML页面中正确设置多个DataContexts。我有一个基本集合,我在后面的代码中创建并设置ItemSource将其绑定到它AutoCompleteBox。同时,我还有另一个datacontext在网格内设置labelsDataSource。如果我设置了这个datacontext,AutoCompleteBox的itemsSource绑定就会丢失。 AutoCompleteBox在该网格内。我不直接分配DataContext到objetc这样:设置多个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}}"> 

回答

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}">