Skip to content

Commit f4a9fdb

Browse files
committed
make the list converter more generic so we can flip templates. consolidate demo for lists
1 parent f72c231 commit f4a9fdb

File tree

7 files changed

+145
-145
lines changed

7 files changed

+145
-145
lines changed

MainDemo.Wpf/Domain/MainWindowViewModel.cs

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -108,14 +108,12 @@ public MainWindowViewModel()
108108
{
109109
DocumentationLink.DemoPageLink<Lists>("Demo View"),
110110
DocumentationLink.DemoPageLink<ListsAndGridsViewModel>("Demo View Model"),
111-
DocumentationLink.StyleLink("ListBox")
112-
}),
113-
new DemoItem("ListViews", new ListViews { DataContext = new ListsAndGridsViewModel() },
114-
new DocumentationLink[]
115-
{
116-
117-
}),
118-
111+
DocumentationLink.StyleLink("ListBox"),
112+
DocumentationLink.StyleLink("ListView")
113+
})
114+
{
115+
VerticalScrollBarVisibilityRequirement = ScrollBarVisibility.Auto
116+
},
119117
new DemoItem("Trees", new Trees { DataContext = new TreesViewModel() },
120118
new []
121119
{

MainDemo.Wpf/ListViews.xaml

Lines changed: 0 additions & 30 deletions
This file was deleted.

MainDemo.Wpf/ListViews.xaml.cs

Lines changed: 0 additions & 10 deletions
This file was deleted.

MainDemo.Wpf/Lists.xaml

Lines changed: 100 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -9,81 +9,116 @@
99
<UserControl.Resources>
1010
<ResourceDictionary>
1111
<ResourceDictionary.MergedDictionaries>
12+
<ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.TextBlock.xaml" />
1213
<ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.ToggleButton.xaml" />
1314
</ResourceDictionary.MergedDictionaries>
1415
</ResourceDictionary>
1516
</UserControl.Resources>
16-
<Grid Margin="8">
17+
<Grid Margin="8" >
1718
<Grid.RowDefinitions>
18-
<RowDefinition/>
19-
<RowDefinition Height="Auto"/>
19+
<RowDefinition Height="Auto" />
20+
<RowDefinition Height="Auto" />
21+
<RowDefinition Height="Auto" />
22+
<RowDefinition Height="Auto" />
23+
<RowDefinition Height="Auto" />
24+
<RowDefinition Height="Auto" />
2025
</Grid.RowDefinitions>
21-
<Grid.ColumnDefinitions>
22-
<ColumnDefinition Width="1*" />
23-
<ColumnDefinition Width="1*" />
24-
<ColumnDefinition Width="1*" />
25-
</Grid.ColumnDefinitions>
26-
<ListBox Grid.Column="0" IsEnabled="{Binding IsChecked, ElementName=EnableListBox}">
27-
<TextBlock>Plain</TextBlock>
28-
<TextBlock>Old</TextBlock>
29-
<TextBlock>ListBox</TextBlock>
30-
<TextBlock>Full of junk</TextBlock>
31-
</ListBox>
32-
<CheckBox Name="EnableListBox" Grid.Row="1" IsChecked="True">Enabled</CheckBox>
33-
<!-- piece together your own items control to create some nice stuff that will make everyone think you are cool. and rightly so, because you are cool. you might even be a hipster for all I know -->
34-
<ItemsControl Grid.Column="1" ItemsSource="{Binding Items1}"
26+
<TextBlock Style="{StaticResource MaterialDesignTitleTextBlock}">ListBox</TextBlock>
27+
<Grid Grid.Row="1">
28+
<Grid.RowDefinitions>
29+
<RowDefinition/>
30+
<RowDefinition Height="Auto"/>
31+
</Grid.RowDefinitions>
32+
<Grid.ColumnDefinitions>
33+
<ColumnDefinition Width="1*" />
34+
<ColumnDefinition Width="1*" />
35+
<ColumnDefinition Width="1*" />
36+
</Grid.ColumnDefinitions>
37+
<ListBox Grid.Column="0" IsEnabled="{Binding IsChecked, ElementName=EnableListBox}">
38+
<TextBlock>Plain</TextBlock>
39+
<TextBlock>Old</TextBlock>
40+
<TextBlock>ListBox</TextBlock>
41+
<TextBlock>Full of junk</TextBlock>
42+
</ListBox>
43+
<CheckBox Name="EnableListBox" Grid.Row="1" IsChecked="True">Enabled</CheckBox>
44+
<!-- piece together your own items control to create some nice stuff that will make everyone think you are cool. and rightly so, because you are cool. you might even be a hipster for all I know -->
45+
<ItemsControl Grid.Column="1" ItemsSource="{Binding Items1}"
3546
Grid.IsSharedSizeScope="True"
3647
Margin="12 0 12 0">
37-
<ItemsControl.ItemTemplate>
38-
<DataTemplate DataType="{x:Type domain:SelectableViewModel}">
39-
<Border x:Name="Border" Padding="8">
40-
<Grid>
41-
<Grid.ColumnDefinitions>
42-
<ColumnDefinition SharedSizeGroup="Checkerz" />
43-
<ColumnDefinition />
44-
</Grid.ColumnDefinitions>
45-
<CheckBox VerticalAlignment="Center" IsChecked="{Binding IsSelected}"/>
46-
<StackPanel Margin="8 0 0 0" Grid.Column="1">
47-
<TextBlock FontWeight="Bold" Text="{Binding Name}" />
48-
<TextBlock Text="{Binding Description}" />
49-
</StackPanel>
50-
</Grid>
51-
</Border>
52-
<DataTemplate.Triggers>
53-
<DataTrigger Binding="{Binding IsSelected}" Value="True">
54-
<Setter TargetName="Border" Property="Background" Value="{DynamicResource MaterialDesignSelection}" />
55-
</DataTrigger>
56-
</DataTemplate.Triggers>
57-
</DataTemplate>
58-
</ItemsControl.ItemTemplate>
59-
</ItemsControl>
60-
<!-- and here's another -->
61-
<ItemsControl Grid.Column="2" ItemsSource="{Binding Items2}"
48+
<ItemsControl.ItemTemplate>
49+
<DataTemplate DataType="{x:Type domain:SelectableViewModel}">
50+
<Border x:Name="Border" Padding="8">
51+
<Grid>
52+
<Grid.ColumnDefinitions>
53+
<ColumnDefinition SharedSizeGroup="Checkerz" />
54+
<ColumnDefinition />
55+
</Grid.ColumnDefinitions>
56+
<CheckBox VerticalAlignment="Center" IsChecked="{Binding IsSelected}"/>
57+
<StackPanel Margin="8 0 0 0" Grid.Column="1">
58+
<TextBlock FontWeight="Bold" Text="{Binding Name}" />
59+
<TextBlock Text="{Binding Description}" />
60+
</StackPanel>
61+
</Grid>
62+
</Border>
63+
<DataTemplate.Triggers>
64+
<DataTrigger Binding="{Binding IsSelected}" Value="True">
65+
<Setter TargetName="Border" Property="Background" Value="{DynamicResource MaterialDesignSelection}" />
66+
</DataTrigger>
67+
</DataTemplate.Triggers>
68+
</DataTemplate>
69+
</ItemsControl.ItemTemplate>
70+
</ItemsControl>
71+
<!-- and here's another -->
72+
<ItemsControl Grid.Column="2" ItemsSource="{Binding Items2}"
6273
Grid.IsSharedSizeScope="True">
63-
<ItemsControl.ItemTemplate>
64-
<DataTemplate DataType="{x:Type domain:SelectableViewModel}">
65-
<Border x:Name="Border" Padding="8" BorderThickness="0 0 0 1" BorderBrush="{DynamicResource MaterialDesignDivider}">
66-
<Grid>
67-
<Grid.ColumnDefinitions>
68-
<ColumnDefinition SharedSizeGroup="Checkerz" />
69-
<ColumnDefinition />
70-
</Grid.ColumnDefinitions>
71-
<ToggleButton VerticalAlignment="Center" IsChecked="{Binding IsSelected}"
74+
<ItemsControl.ItemTemplate>
75+
<DataTemplate DataType="{x:Type domain:SelectableViewModel}">
76+
<Border x:Name="Border" Padding="8" BorderThickness="0 0 0 1" BorderBrush="{DynamicResource MaterialDesignDivider}">
77+
<Grid>
78+
<Grid.ColumnDefinitions>
79+
<ColumnDefinition SharedSizeGroup="Checkerz" />
80+
<ColumnDefinition />
81+
</Grid.ColumnDefinitions>
82+
<ToggleButton VerticalAlignment="Center" IsChecked="{Binding IsSelected}"
7283
Style="{StaticResource MaterialDesignActionLightToggleButton}"
7384
Content="{Binding Code}" />
74-
<StackPanel Margin="8 0 0 0" Grid.Column="1">
75-
<TextBlock FontWeight="Bold" Text="{Binding Name}" />
76-
<TextBlock Text="{Binding Description}" />
77-
</StackPanel>
78-
</Grid>
79-
</Border>
80-
<DataTemplate.Triggers>
81-
<DataTrigger Binding="{Binding IsSelected}" Value="True">
82-
<Setter TargetName="Border" Property="Background" Value="{DynamicResource MaterialDesignSelection}" />
83-
</DataTrigger>
84-
</DataTemplate.Triggers>
85-
</DataTemplate>
86-
</ItemsControl.ItemTemplate>
87-
</ItemsControl>
85+
<StackPanel Margin="8 0 0 0" Grid.Column="1">
86+
<TextBlock FontWeight="Bold" Text="{Binding Name}" />
87+
<TextBlock Text="{Binding Description}" />
88+
</StackPanel>
89+
</Grid>
90+
</Border>
91+
<DataTemplate.Triggers>
92+
<DataTrigger Binding="{Binding IsSelected}" Value="True">
93+
<Setter TargetName="Border" Property="Background" Value="{DynamicResource MaterialDesignSelection}" />
94+
</DataTrigger>
95+
</DataTemplate.Triggers>
96+
</DataTemplate>
97+
</ItemsControl.ItemTemplate>
98+
</ItemsControl>
99+
</Grid>
100+
<TextBlock Style="{StaticResource MaterialDesignTitleTextBlock}" Grid.Row="2" Margin="0 32 0 0">ListView</TextBlock>
101+
<ListView Grid.Row="3">
102+
<ListViewItem>
103+
Hello
104+
</ListViewItem>
105+
<ListViewItem>
106+
World
107+
</ListViewItem>
108+
<ListViewItem>
109+
:)
110+
</ListViewItem>
111+
</ListView>
112+
<TextBlock Style="{StaticResource MaterialDesignTitleTextBlock}" Grid.Row="4" Margin="0 32 0 0">ListView.GridView</TextBlock>
113+
<ListView Grid.Row="5" ItemsSource="{Binding Items1}">
114+
<ListView.View>
115+
<GridView>
116+
<GridViewColumn DisplayMemberBinding="{Binding Code}" Header="Code" />
117+
<GridViewColumn DisplayMemberBinding="{Binding Name}" Header="Name" />
118+
<GridViewColumn DisplayMemberBinding="{Binding Description}" Header="Description" />
119+
</GridView>
120+
</ListView.View>
121+
</ListView>
88122
</Grid>
123+
89124
</UserControl>

MainDemo.Wpf/MaterialDesignDemo.csproj

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -140,9 +140,6 @@
140140
<Compile Include="Lists.xaml.cs">
141141
<DependentUpon>Lists.xaml</DependentUpon>
142142
</Compile>
143-
<Compile Include="ListViews.xaml.cs">
144-
<DependentUpon>ListViews.xaml</DependentUpon>
145-
</Compile>
146143
<Compile Include="MenusAndToolBars.xaml.cs">
147144
<DependentUpon>MenusAndToolBars.xaml</DependentUpon>
148145
</Compile>
@@ -278,10 +275,6 @@
278275
<SubType>Designer</SubType>
279276
<Generator>MSBuild:Compile</Generator>
280277
</Page>
281-
<Page Include="ListViews.xaml">
282-
<SubType>Designer</SubType>
283-
<Generator>MSBuild:Compile</Generator>
284-
</Page>
285278
<Page Include="MainWindow.xaml">
286279
<Generator>MSBuild:Compile</Generator>
287280
<SubType>Designer</SubType>

MaterialDesignThemes.Wpf/Converters/ListViewItemContainerStyleConverter.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,17 @@ namespace MaterialDesignThemes.Wpf.Converters
99
/// <summary>
1010
/// Helps coerce the correct item container style for a <see cref="ListView"/>, according to whether the list is displaying in standard mode, or using a <see cref="ListView.View"/>, such as a <see cref="GridView"/>.
1111
/// </summary>
12-
public class ListViewItemContainerStyleConverter : IValueConverter
12+
public class ListViewGridViewConverter : IValueConverter
1313
{
1414
/// <summary>
1515
/// Item container style to use when <see cref="ListView.View"/> is <c>null</c>.
1616
/// </summary>
17-
public Style DefaultItemContainerStyle { get; set; }
17+
public object DefaultValue { get; set; }
1818

1919
/// <summary>
2020
/// Item container style to use when <see cref="ListView.View"/> is not <c>null</c>, typically when a <see cref="GridView"/> is applied.
2121
/// </summary>
22-
public Style ViewItemContainerStyle { get; set; }
22+
public object ViewValue { get; set; }
2323

2424
/// <summary>
2525
/// Returns the item container <see cref="Style"/> to use for a <see cref="ListView"/>.
@@ -34,10 +34,10 @@ public object Convert(object value, Type targetType, object parameter, CultureIn
3434
var listView = value as ListView;
3535
if (listView != null)
3636
{
37-
return listView.View != null ? ViewItemContainerStyle : DefaultItemContainerStyle;
37+
return listView.View != null ? ViewValue : DefaultValue;
3838
}
3939

40-
return value is ViewBase ? ViewItemContainerStyle : DefaultItemContainerStyle;
40+
return value is ViewBase ? ViewValue : DefaultValue;
4141
}
4242

4343
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)

MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.ListView.xaml

Lines changed: 34 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -183,18 +183,45 @@
183183
</Style.Triggers>
184184
</Style>
185185

186-
<converters:ListViewItemContainerStyleConverter
187-
x:Key="ListViewItemContainerStyleConverter"
188-
DefaultItemContainerStyle="{StaticResource MaterialDesignListBoxItem}"
189-
ViewItemContainerStyle="{StaticResource MaterialDesignGridViewItem}" />
190-
186+
<converters:ListViewGridViewConverter
187+
x:Key="MaterialDesignListViewItemContainerStyleConverter"
188+
DefaultValue="{StaticResource MaterialDesignListBoxItem}"
189+
ViewValue="{StaticResource MaterialDesignGridViewItem}" />
190+
191+
<converters:ListViewGridViewConverter x:Key="MaterialDesignListViewTemplateConverter">
192+
<converters:ListViewGridViewConverter.DefaultValue>
193+
<ControlTemplate TargetType="{x:Type ListView}">
194+
<ScrollViewer>
195+
<ItemsPresenter />
196+
</ScrollViewer>
197+
<ControlTemplate.Triggers>
198+
<Trigger Property="IsGrouping" Value="True">
199+
<Setter Property="ScrollViewer.CanContentScroll" Value="false" />
200+
</Trigger>
201+
</ControlTemplate.Triggers>
202+
</ControlTemplate>
203+
</converters:ListViewGridViewConverter.DefaultValue>
204+
<converters:ListViewGridViewConverter.ViewValue>
205+
<ControlTemplate TargetType="{x:Type ListView}">
206+
<ScrollViewer Style="{DynamicResource {x:Static GridView.GridViewScrollViewerStyleKey}}">
207+
<ItemsPresenter />
208+
</ScrollViewer>
209+
<ControlTemplate.Triggers>
210+
<Trigger Property="IsGrouping" Value="True">
211+
<Setter Property="ScrollViewer.CanContentScroll" Value="false" />
212+
</Trigger>
213+
</ControlTemplate.Triggers>
214+
</ControlTemplate>
215+
</converters:ListViewGridViewConverter.ViewValue>
216+
</converters:ListViewGridViewConverter>
217+
191218
<Style x:Key="MaterialDesignListView" TargetType="{x:Type ListView}">
192219
<Setter Property="Background" Value="{DynamicResource MaterialDesignPaper}" />
193220
<Setter Property="Foreground" Value="{DynamicResource MaterialDesignBody}" />
194221
<Setter Property="BorderBrush" Value="{DynamicResource MaterialDesignTextBoxBorder}" />
195222
<Setter Property="BorderThickness" Value="0" />
196223
<Setter Property="FontSize" Value="13" />
197-
<Setter Property="ItemContainerStyle" Value="{Binding RelativeSource={RelativeSource Self}, Converter={StaticResource ListViewItemContainerStyleConverter}}" />
224+
<Setter Property="ItemContainerStyle" Value="{Binding RelativeSource={RelativeSource Self}, Path=View, Converter={StaticResource MaterialDesignListViewItemContainerStyleConverter}}" />
198225
<Setter Property="ScrollViewer.CanContentScroll" Value="True" />
199226
<Setter Property="ScrollViewer.PanningMode" Value="Both" />
200227
<Setter Property="Stylus.IsFlicksEnabled" Value="False" />
@@ -204,20 +231,7 @@
204231
<Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto" />
205232
<Setter Property="ScrollViewer.CanContentScroll" Value="True" />
206233
<Setter Property="VerticalContentAlignment" Value="Center" />
207-
<Setter Property="Template">
208-
<Setter.Value>
209-
<ControlTemplate TargetType="{x:Type ListView}">
210-
<ScrollViewer Style="{DynamicResource {x:Static GridView.GridViewScrollViewerStyleKey}}">
211-
<ItemsPresenter />
212-
</ScrollViewer>
213-
<ControlTemplate.Triggers>
214-
<Trigger Property="IsGrouping" Value="True">
215-
<Setter Property="ScrollViewer.CanContentScroll" Value="false" />
216-
</Trigger>
217-
</ControlTemplate.Triggers>
218-
</ControlTemplate>
219-
</Setter.Value>
220-
</Setter>
234+
<Setter Property="Template" Value="{Binding RelativeSource={RelativeSource Self}, Path=View, Converter={StaticResource MaterialDesignListViewTemplateConverter}}" />
221235
</Style>
222236

223237
</ResourceDictionary>

0 commit comments

Comments
 (0)