У меня есть базовый класс, который выглядит примерно так:TreeView с более чем одной колонки
public class Item
{
private string name;
private bool visible;
private double value;
private Item parent;
private List<Item> children = new List<Item>();
…
}
У меня есть список вещей, которые мне нужно отобразить в виде дерева. Для каждого пункта я должен отобразить следующие поля:
- «видимых» в виде флажка «имя»
- как TextBlock
- «значение» в качестве слайдера
Я хочу сделайте это с помощью MVVM, поэтому я определил следующие классы «ItemViewModel» и «ItemCollectionViewModel», к которым я привяжу свое дерево.
Я попытался следующий код XAML:
<TreeView ItemsSource="{Binding ItemViewModelList}">
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" />
<Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />
<Setter Property="FontWeight" Value="Normal" />
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="FontWeight" Value="Bold" />
</Trigger>
</Style.Triggers>
</Style>
</TreeView.ItemContainerStyle>
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Children}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition SharedSizeGroup="VisibiltyCol" />
<ColumnDefinition SharedSizeGroup="NameCol" />
<ColumnDefinition SharedSizeGroup="ValueCol" />
</Grid.ColumnDefinitions>
<CheckBox Grid.Column="0" IsChecked="{Binding Visible}" Margin="5" />
<TextBlock Grid.Column="1" Text="{Binding Name}" Margin="5" />
<Slider Grid.Column="2" Value="{Binding Value}" Width="100" Margin="10, 0, 0, 0" Maximum="1" />
</Grid>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
Это работает отлично, за исключением того, что я хочу, чтобы все ползунки быть правым ниже друг друга, и они не являются. (Только те, кто находится на одном уровне иерархии, появляются под друг другом).
Другими словами, мне нужно дерево для отображения ползунков (представляющих свойство «Значение») в другом столбце.
Может кто-нибудь помочь?
Спасибо. Оно работает. – Holly
@Holly Пожалуйста, отметьте ответ как правильное решение, если оно работает и приемлемо для вас. – Jatin