我有一个数组(存储为ObservableCollection
)我正在动态实例化的数据,我将其链接到ItemsControl
中的StackPanel
。数据的格式如下:
public class VariableValueList<T>
{
public String Name {get; private set;}
public IList<T> Values {get; private set;}
...
}
我的ObservableCollection<VariableValueList<double>> IVCollection
在构建之后与ItemsControl
链接,其中包含以下内容:
MainWindow.xaml.cs
private void Open_OnClick(object sender, RoutedEventArgs e)
{
...
IndependentVariables.ItemsSource = IVCollection;
}
IndependentVariables
来自这里:
MainWindow.xaml
<StackPanel>
<ItemsControl Name="IndependentVariables" Style="{StaticResource IVCell}"></ItemsControl>
</StackPanel>
我需要构建样式IVCell
才能访问每个VariableValueList<double>
(一旦我得到它,获取其Name
和Values
成员将是微不足道的。
我需要格式化数据,以便为每个元素打印Name
和Values
,如下所示:
名称
价值价值......
名称
价值价值......
...
利用现有的StackPanel
。我知道这个问题至少存在两个基本问题。
如何为此阵列提供Style访问权限? (或者:我有阵列后如何修改样式?)
如何动态地在Style中实例化新元素(例如,对于每个数组元素)?
我非常感谢你的帮助。如果我试图以这种方式构建任何完全错误,请纠正我。我是WPF的新手。
答案 0 :(得分:4)
您不需要额外的StackPanel
,因为ItemsControl
会为项目创建自己的面板。
Style不需要访问数组,ItemsControl
自动为所有项创建和管理容器。您所需要的只是为两种类型的项目提供DataTemplate
。您可以在ItemsControl
DataTemplate
内使用另一个VariableValueList<double>
来显示Values
属性中包含的项目。要获得水平布局,请为ItemsPanelTemplate
设置自定义ItemsControl
。
简单的风格:
<Style TargetType="{x:Type ItemsControl}"
x:Key="IVCell">
<Setter Property="ItemTemplate">
<Setter.Value>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Name}" />
<ItemsControl ItemsSource="{Binding Values}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel />
<!-- or <StackPanel Orientation="Horizontal"> -->
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}" Margin="2,0" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>