【发布时间】:2017-03-21 14:30:12
【问题描述】:
好的,对不起我之前的混乱。
情况是这样的: 我有两个自定义对象定义如下: 主对象:
public class MainObject
{
private string mainObjectName;
public string MainObjectName { get { return mainObjectName; } }
private List<SubObject> subObjectData;
public List<SubObject> SubObjectData { get { return subObjectData; } }
public MainObject(string name, List<SubObject> objectData)
{
mainObjectName = name;
subObjectData = objectData;
}
}
子对象:
public class SubObject
{
private string subObjectName;
public string SubObjectName { get { return subObjectName; } }
private List<int> integerData;
public List<int> IntegerData { get { return integerData; } }
public SubObject(string name, List<int> data)
{
subObjectName = name;
integerData = data;
}
}
我还有一个视图模型,为简单起见,它使用这两个对象定义了一些数据,如下所示:VM
public List<Model.MainObject> VMList = new List<Model.MainObject>()
{
new Model.MainObject("MainItem1", new List<Model.SubObject>()
{
new Model.SubObject("SubItem1", new List<int>() { 1,6,3}),
new Model.SubObject("SubItem2", new List<int>() { 5,2,9})
}),
new Model.MainObject("MainItem2", new List<Model.SubObject>()
{
new Model.SubObject("SubItem1", new List<int>() { 0,3,1}),
new Model.SubObject("SubItem2", new List<int>() { 7,5,2})
})
};
现在我有以下用户界面
<Grid>
<ItemsControl Name="MainObjectIC">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding MainObjectName}"/>
<ItemsControl Name="SubObjectIC">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding SubObjectName}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
我在后面的代码中分配 MainObjectIC 的 ItemsSource,如下所示:
ViewModel.VM dc = new ViewModel.VM();
public MainWindow()
{
InitializeComponent();
DataContext = dc;
MainObjectIC.ItemsSource = dc.VMList;
}
我还想将 ItemsSource 分配给 SubObjectIC,但要做到这一点,我必须获取 ItemsControl 对象。这就是我想要实现的目标。
据我了解,从后面的代码中分配 ItemsSource 属性可能非常糟糕且无用。
【问题讨论】:
-
我认为“子”集合绑定的相对来源应该可以工作。我这样做只是为了找到祖先类型的窗口,但我认为它会允许更多类型。
-
标记中到处都有
{Binding ...}绑定。为什么不能从 xaml 绑定RelicItemsSource的 ItemsSource? -
是的,但我不知道该怎么做,因为 RelicItemsSource 应该依赖于绑定到 ComponentsItemsSource 的对象。另外我认为我需要将 DataContext 绑定到“this”而不是我的客户对象。
-
似乎方法不对,但您可以为此使用 Binding ElementName
-
如果您在解决问题时需要帮助,请修正您的问题,以便在其中包含一个很好的 minimal reproducible example,清楚地显示您尝试过的内容,并准确解释您无法弄清楚的内容。跨度>
标签: c# wpf xaml itemssource