2011-11-08 65 views
1

我有一个带状combob箱为:绑定色带组合框观察到的集合

<r:RibbonComboBox DataContext="this" 
        SelectionBoxWidth="62" 
        VerticalAlignment="Center" 
        IsEditable="True" 
        Label="Saved Queries" 
        Name="Saved_Queries" 
        ToolTip="Select an item to run or edit" > 
<r:RibbonGallery 
        MaxColumnCount="1" 
        Name="RibbonQu" 
        ScrollViewer.VerticalScrollBarVisibility="Auto" 
        SelectionChanged="RibbonGallery_SelectionChanged" > 
    <r:RibbonGalleryCategory ItemsSource="{Binding SavedXml}" > 
      <r:RibbonGalleryItem Content="Green" Foreground="Green" /> 
      <r:RibbonGalleryItem Content="Blue" Foreground="Blue" /> 
      <r:RibbonGalleryItem Content="Orange" Foreground="Orange" /> 
    </r:RibbonGalleryCategory> 
</r:RibbonGallery> 

我需要在comobobox的项目绑定到一个可观察的集合,如下所示:

private void Window_Loaded(object sender, RoutedEventArgs e) 
    { 
     XmlDocument doc = new XmlDocument(); 
     doc.Load("QueryList.xml"); 

     XmlNodeList List = doc.SelectNodes("//Query"); 

     foreach (XmlElement element in List) 
     { 

      if (element == null) return; 
      if (element != null) 
      { 
       //Saved_Queries.Items.Add(element.InnerText); 

       _savedxml.Add(element.InnerText.ToString()); 
      } 
     } 
    } 
    public ObservableCollection<string> SavedXml 
    { 
     get { return _savedxml; } 
    set{} 
    } 

但是,当我运行它时,我没有在组合框中看到任何东西。我认为问题出在数据上下文中,它已经在代码中设置给其他人,因此在我使用的组合框中: DataContext =“this” 但我仍然无法实现任何目标。我该如何解决这个问题?谢谢!

回答

1

如您怀疑的那样,您错误地分配了DataContext。

如果您需要组合只包含SavedXml中的项目,并且实际上不需要设置其DataContext,请尝试删除DataContext="this"并添加ItemsSource="{Binding SavedXml, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}"

如果你需要设置DataContext,将分配改为:DataContext="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}"然后ItemsSource="{Binding SavedXml}"

在这两种情况下,由于SavedXml不是依赖属性,它不是使用INotifyProperty改变界面,你必须填写运行之前InitializeComponent()的项目。事件更好:使SavedXml a DependencyProperty

+0

是的,谢谢你工作! :) – user877852