我的ObservableCollection来自类型FUClass。在这个类中是一个FUSubClass的List。ListView Itemsource绑定到ObservableCollection FUList。
My TreeView显示GroupName,a有一个TreeViewItem和ItemName。
问题是,只有1个TreeViewItem与所有项目从FUSubClassList显示,但我想为每个项目一个TreeViewItem。不知道如何实现在ItemContainerStyle。
XAML ItemContainerStyle:
<Style PresentationOptions:Freeze="True" TargetType="{x:Type ListViewItem}">
<Setter Property="Height" Value="Auto" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListViewItem}">
<TreeView Width="1248" MinHeight="50">
<TreeViewItem>
<TreeViewItem.Header>
<StackPanel Orientation="Horizontal">
<ContentPresenter Content="{Binding GroupName}" RecognizesAccessKey="False" />
</StackPanel>
</TreeViewItem.Header>
<TreeViewItem ItemsSource="{Binding FUSubClassList}">
<TreeViewItem.Header>
<Grid>
<ContentPresenter Content="{Binding ItemName}" RecognizesAccessKey="False" />
</Grid>
</TreeViewItem.Header>
</TreeViewItem>
</TreeViewItem>
</TreeView>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
字符串
C#
public class FUClass : INotifyPropertyChanged
{
private string groupName;
public string GroupName
{
get { return this.groupName; }
set
{
if (this.groupName != value)
{
this.groupName = value;
this.OnPropertyChanged(nameof(GroupName));
}
}
}
private ObservableCollection<FUSubClass> FUSubClassList = new ObservableCollection<FUSubClass>();
public ObservableCollection<FUSubClass> FUSubClassList
{
get { return FUSubClassList; }
set { FUSubClassList = value; }
}
public class FUSubClass : INotifyPropertyChanged
{
private string itemName;
public string ItemName
{
get { return this.itemName; }
set
{
if (this.itemName != value)
{
this.itemName = value;
this.OnPropertyChanged(nameof(ItemName));
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
private ObservableCollection<FUClass> FUList = new ObservableCollection<FUClass>();
型
用户界面
的数据
2条答案
按热度按时间r6vfmomb1#
跳过
ItemContainerStyle
并为您的数据类型定义数据模板,例如:字符串
vlju58qv2#
所以,我要做的第一件事是创建一个基类,父类/子类可以继承它。我称之为
FUBase
,但它看起来像这样:字符串
然后,父类(我称之为
FUGroup
)和实际的项类(名为FUItem
)看起来像这样:型
注意
FUGroup
类有一个ObservableCollection<FUBase>
?它允许你在每个FUGroup
中包含FUGroup
或FUItem
对象。在我做的测试应用程序中,我就是这样存储顶级ObservableCollection<FUBase>
的(我在MainWindowViewModel
中称之为Items
)。型
在此之后,您需要的最后一件事是DataTemplates。我只是把它们放在
TreeView
的资源中,但您可以把它们扔到ResourceDictionary
或任何父FrameworkElement
中。型
结果:
x1c 0d1x的数据