Привязка ленты комбобокса к наблюдаемой коллекции - PullRequest
1 голос
/ 08 ноября 2011

У меня есть поле со списком ленты:

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

Мне нужно привязать элементы комобокса к наблюдаемой коллекции следующим образом:

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 Ответ

1 голос
/ 08 ноября 2011

Как вы и подозревали, вы неправильно назначаете 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...