gpt4 book ai didi

c# - 将 ObservableCollection 解释为 StackPanel 元素的 WPF 样式

转载 作者:行者123 更新时间:2023-11-30 21:00:48 26 4
gpt4 key购买 nike

我有一个动态实例化的数据数组(存储为 ObservableCollection ),我将其链接到 ItemsControlStackPanel 内.数据格式如下:

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> (一旦我明白了,获得它的 NameValues 成员就很简单了)。

我需要对数据进行格式化,以便对于每个元素,NameValues被打印出来,像这样:

Name

Value Value Value ...

Name

Value Value Value ...

...

利用现有的StackPanel .我明白这个问题至少有两个潜在的问题。

  1. 如何为 Style 授予对该数组的访问权限? (或者:有了数组后如何修改 Style?)

  2. 如何在 Style 中即时实例化新元素(例如,对于每个数组元素)?

非常感谢您的帮助。如果我试图以这种方式构建任何内容完全错误,请纠正我。我是 WPF 的新手。

最佳答案

你不需要额外的 StackPanel ,因为 ItemsControl将为项目创建自己的面板。样式不需要访问数组,ItemsControl自动为所有项目创建和管理容器。您只需要提供DataTemplate对于这两种类型的项目。您可以使用另一个 ItemsControl里面DataTemplate对于 VariableValueList<double>显示 Values 中包含的项目属性(property)。要获得水平布局,请设置自定义 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>

关于c# - 将 ObservableCollection 解释为 StackPanel 元素的 WPF 样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14718707/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com