我正在使用WPF在C#/ XAML中实现一个汉堡包菜单,我不确定我的方式是否正确。
最终目标是拥有父项列表,每个项都可以包含子项列表。 这将位于屏幕左侧的垂直菜单控件中。例如:
Parent 1
Child 1
Parent 2
Child 1
Child 2
Child 3
现在我有以下内容:
<Grid>
<ItemsControl DataContext="{Binding HamburgerModel}" ItemsSource="{Binding HamburgerModel.ParentItems}" Foreground="White" Background="Red" HorizontalAlignment="Left" Width="75" MouseDown="ItemsControl_MouseDown">
<ItemsControl.ItemTemplate>
<DataTemplate>
<GroupBox Header="{Binding Text}">
<ItemsControl ItemsSource="{Binding ParentItems.ChildItems}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Text}" />
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</GroupBox>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
我的模型看起来像这样:
public class HamburgerMenuModel
{
public event PropertyChangedEventHandler PropertyChanged;
protected void NotifyPropertyChanged(string info)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(info));
}
public ObservableCollection<ParentItem> ParentItems { get; set; }
}
public class ParentItem : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void NotifyPropertyChanged(string info)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(info));
}
public string Text { get; set; }
public string URL { get; set; }
public ObservableCollection<ChildItem> ChildItems { get; set; }
}
public class ChildItem : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void NotifyPropertyChanged(string info)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(info));
}
public string Text { get; set; }
public string URL { get; set; }
public long Offset { get; set; }
}
我的问题是,这种做法有意义吗?有没有明显的错误或缺陷? 任何关于下一个方向的指针都是最有帮助的。