#c# #wpf #binding #combobox #ribbon
#c# #wpf #привязка #выпадающий список #лента
Вопрос:
У меня есть ribbon combob box как:
<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{}
}
Но я ничего не вижу в comobox, когда я его запускаю.Я думаю, что проблема связана с контекстом данных, который был установлен на другие в коде, поэтому в выпадающем списке я использую :
DataContext=»this»
но я все еще ничего не могу добиться. как я могу это сделать? Спасибо!
Ответ №1:
Как вы и подозревали, вы неправильно назначили DataContext.
Если вам нужно, чтобы в combo были только элементы в 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
.