Я хотел бы иметь список TextBlocks с ComboBoxes рядом с каждым из них. Источник данных ComboBoxes должен быть одинаковым для каждого ComboBox. Однако каждый TextBlock должен содержать секвенциальный элемент списка Оба источника данных для ComboBoxs и TextBlocks находятся в моем объекте «Настройки». Поэтому я установил DataContext для всего окна в этот объект настроек.Правильно установить источник привязки в XAML
Вот моя проблема: Источник данных TextBlock: Список называется полями, которые находятся внутри объекта под заголовком «Заголовок» типа «Линия» (который, конечно же, находится в объекте настроек, который является моим datacontext).
Таким образом, графически: настройки (тип: Настройка) - заголовок (тип: CsvLine) - Поля (тип: Список строки)
Теперь ComboBox. Источник данных каждого ComboBox должен быть списком под названием Метка
Графический: Настройки (типа: Настройка) - Тэги (типа: Список строки)
Я не знаю, как я должен указать на эти места, Я пробовал много вариантов, но никто из них не работает. Я вижу просто пустое окно.
Вот мой код:
<Grid>
<StackPanel Orientation="Horizontal">
<ItemsControl ItemsSource="{Binding Headers}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Fields}"/>
<ComboBox ItemsSource="{Binding DataContext.Tags,
RelativeSource={RelativeSource AncestorType=ItemsControl}}">
</ComboBox>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
</Grid>
Я понятия не имею, что я должен фактически передать, как ItemsSource для ItemsControl, потому что я думаю, что это должно быть общим источником для обоих TextBoxes и ComboBoxes, но их единственный общий источник установки объект - но я уже установил его как свой DataContext. Я использовал RelativeSource в ComboBox, но я не уверен, для чего он используется (хотя я читал статью об этом в MSDN). Я не знаю, почему, но мне очень сложно понять привязанность - я изо всех сил пытаюсь заставить что-то работать.
// EDIT: Вот мой класс Настройки - что тип моих настроек объекта:
public class Settings
{
public CsvLine AllHeaders1
{
get
{
return _allHeaders1;
}
}
public CsvLine _allHeaders1 = new CsvLine()
{
Fields = new List<string>()
{
"Header1" , "Header2" , "Header3"
}
};
private List<String> _tags;
public List<String> Tags
{
get
{
return new List<string>() { "Tag1", "Tag2", "Tag3", "Tag4", "Tag5" };
}
set
{
_tags = value;
}
}
}
А вот мой CsvLine класс:
public class CsvLine
{
public List<string> Fields = new List<string>();
public int LineNumber;
}
Не похоже, что вы на расстоянии миллиона миль. Не могли бы вы разместить свой объект настроек, так как сложно описать его описание? Конечно, привязка в TextBlock '{Binding Fields}' неверна, учитывая, что в вашем описании Fields - это список строк. – ibebbs
Конечно, я добавлю это через минуту – Loreno