【发布时间】:2016-08-24 08:52:23
【问题描述】:
我想要一个 TextBlocks 列表,每个 TextBlocks 旁边都有 ComboBoxes。 每个 ComboBox 的 ComboBoxes 数据源应该相同。然而,每个 TextBlock 都应该包含 List 的后续元素 ComboBoxs 和 TextBlocks 的数据源都在我的“设置”对象中。所以我将整个窗口的DataContext设置为这个设置对象。
这是我的问题: TextBlock的数据源是:List叫做Fields,在一个叫做“Header”的“Line”类型的对象里面(当然是在settings对象里面,就是我的datacontext)。
因此,以图形方式: 设置(类型:设置)-标题(类型:CsvLine)-字段(类型:字符串列表)
现在组合框。每个 ComboBox 的数据源应该是一个名为 Tags 的 List
图形化: 设置(类型:设置)-标签(类型:字符串列表)
我不知道我应该如何指向这些位置,我尝试了很多选项,但都不起作用。我看到的只是一个空白窗口。
这是我的代码:
<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。 我在 ComboBox 中使用过 RelativeSource,但我不确定它的用途(尽管我在 MSDN 上读过一篇关于它的文章)。我不知道为什么,但我真的很难理解绑定 - 我正在努力让任何东西正常工作。
//编辑: 这是我的设置类 - 这是我的设置对象的类型:
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}' 中的绑定是错误的。
-
当然,我一会儿再补充