我有一个数据数组(存储为ObservableCollection
),我正在动态实例化它,并将它链接到StackPanel
中的ItemsControl
。数据的格式如下:
public class VariableValueList<T>
{
public String Name {get; private set;}
public IList<T> Values {get; private set;}
...
}
并且我的ObservableCollection<VariableValueList<double>> IVCollection
,在构建之后,通过以下链接到ItemsControl
:
主窗口.xaml.cs
private void Open_OnClick(object sender, RoutedEventArgs e)
{
...
IndependentVariables.ItemsSource = IVCollection;
}
其中IndependentVariables
源自此处:
主窗口.xaml
<StackPanel>
<ItemsControl Name="IndependentVariables" Style="{StaticResource IVCell}"></ItemsControl>
</StackPanel>
我需要构造样式IVCell
来访问每个VariableValueList<double>
(一旦我得到了它,获得它的Name
和Values
成员将是微不足道的)。
我需要格式化数据,以便为每个元素打印Name
和Values
,如下所示:
名称
值值值。。。
名称
值值值。。。
利用现有的CCD_ 13。我知道这个问题至少有两个潜在的问题。
如何授予Style对此数组的访问权限?(或者:在我拥有数组后,我如何修改样式?)
如何动态实例化Style中的新元素(例如,对于每个数组元素)?
我真的很感激你的帮助。如果我试图以这种方式构建任何东西完全错误,请纠正我。我是WPF的新手。
您不需要额外的StackPanel
,因为ItemsControl
将为项目创建自己的面板。样式不需要访问数组,ItemsControl
会自动创建和管理所有项的容器。您所需要的只是为这两种类型的项目提供DataTemplate
。对于VariableValueList<double>
,可以在DataTemplate
中使用另一个ItemsControl
来显示Values
属性中包含的项目。要获得水平布局,请为该ItemsControl
设置自定义ItemsPanelTemplate
。
简单的风格开始:
<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>