2011-03-06 82 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}">