Skip to content

Commit 2b630fe

Browse files
committed
Handling string collections in gridview
Updated nuget packages
1 parent f6f852b commit 2b630fe

File tree

7 files changed

+81
-10
lines changed

7 files changed

+81
-10
lines changed

MsGraphSamples.Services/MSGraphSamples.Services.csproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@
99
</PropertyGroup>
1010

1111
<ItemGroup>
12-
<PackageReference Include="Azure.Identity" Version="1.13.2" />
13-
<PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="9.0.1" />
14-
<PackageReference Include="Microsoft.Graph" Version="5.69.0" />
12+
<PackageReference Include="Azure.Identity" Version="1.14.0" />
13+
<PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="9.0.5" />
14+
<PackageReference Include="Microsoft.Graph" Version="5.79.0" />
1515
</ItemGroup>
1616

1717
</Project>

MsGraphSamples.WPF/Helpers/Converters.cs

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@
55
using MsGraphSamples.Services;
66
using System.Globalization;
77
using System.Windows.Data;
8+
using System;
9+
using System.Collections;
10+
using System.Collections.Generic;
11+
using System.Linq;
812

913
namespace MsGraphSamples.WPF.Converters;
1014

@@ -57,3 +61,28 @@ public object ConvertBack(object value, Type targetType, object parameter, Cultu
5761
throw new NotImplementedException();
5862
}
5963
}
64+
65+
public class CollectionToCommaSeparatedStringConverter : IValueConverter
66+
{
67+
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
68+
{
69+
if (value is IEnumerable<string> stringEnumerable)
70+
{
71+
return string.Join(", ", stringEnumerable);
72+
}
73+
if (value is IEnumerable enumerable && value is not string)
74+
{
75+
var items = new List<string>();
76+
foreach (var item in enumerable)
77+
{
78+
if (item != null)
79+
items.Add(item.ToString());
80+
}
81+
return string.Join(", ", items);
82+
}
83+
return value?.ToString() ?? string.Empty;
84+
}
85+
86+
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
87+
=> throw new NotImplementedException();
88+
}

MsGraphSamples.WPF/MsGraphSamples.WPF.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@
1818

1919
<ItemGroup>
2020
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.4.0" />
21-
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="9.0.1" />
22-
<PackageReference Include="Microsoft.Graph" Version="5.69.0" />
21+
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="9.0.5" />
22+
<PackageReference Include="Microsoft.Graph" Version="5.79.0" />
2323
<PackageReference Include="Microsoft.Xaml.Behaviors.Wpf" Version="1.1.135" />
2424
</ItemGroup>
2525

MsGraphSamples.WPF/Views/MainWindow.xaml.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
// Copyright (c) Microsoft Corporation.
22
// Licensed under the MIT License.
33

4+
using MsGraphSamples.WPF.Converters;
45
using MsGraphSamples.WPF.ViewModels;
56
using System.ComponentModel;
67
using System.Windows;
78
using System.Windows.Controls;
9+
using System.Windows.Data;
810
using System.Windows.Input;
911

1012
namespace MsGraphSamples.WPF.Views;
@@ -51,6 +53,19 @@ private void ResultsDataGrid_AutoGeneratingColumn(object sender, DataGridAutoGen
5153
{
5254
e.Column.Width = new DataGridLength(1, DataGridLengthUnitType.Star);
5355

56+
// If the property is a string collection, use the converter
57+
var property = e.PropertyType;
58+
if (typeof(System.Collections.IEnumerable).IsAssignableFrom(property) && property != typeof(string))
59+
{
60+
if (e.Column is DataGridTextColumn textColumn)
61+
{
62+
textColumn.Binding = new Binding(e.PropertyName)
63+
{
64+
Converter = new CollectionToCommaSeparatedStringConverter()
65+
};
66+
}
67+
}
68+
5469
var orderByProperty = ViewModel.OrderBy?.Split(' ')[0];
5570
var direction = ViewModel.OrderBy?.Split(' ').ElementAtOrDefault(1) ?? "asc";
5671
if (e.PropertyName.Equals(orderByProperty, StringComparison.InvariantCultureIgnoreCase))

MsGraphSamples.WinUI/Helpers/Converters.cs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
// Licensed under the MIT License.
33

44
using Microsoft.UI.Xaml.Data;
5+
using System.Collections;
56

67
namespace MsGraphSamples.WinUI.Converters;
78

@@ -16,4 +17,30 @@ public object Convert(object value, Type targetType, object parameter, string la
1617
}
1718

1819
public object ConvertBack(object value, Type targetType, object parameter, string language) => throw new NotImplementedException();
20+
}
21+
public class CollectionToCommaSeparatedStringConverter : IValueConverter
22+
{
23+
public object Convert(object value, Type targetType, object parameter, string language)
24+
{
25+
if (value is IEnumerable<string> stringEnumerable)
26+
{
27+
return string.Join(", ", stringEnumerable);
28+
}
29+
if (value is IEnumerable enumerable && value is not string)
30+
{
31+
var items = new List<string>();
32+
foreach (var item in enumerable)
33+
{
34+
if (item != null)
35+
items.Add(item.ToString());
36+
}
37+
return string.Join(", ", items);
38+
}
39+
return value?.ToString() ?? string.Empty;
40+
}
41+
42+
public object ConvertBack(object value, Type targetType, object parameter, string language)
43+
{
44+
throw new NotImplementedException();
45+
}
1946
}

MsGraphSamples.WinUI/MsGraphSamples.WinUI.csproj

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,11 @@
3131

3232
<ItemGroup>
3333
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.4.0" />
34-
<PackageReference Include="CommunityToolkit.WinUI.Converters" Version="8.1.240916" />
34+
<PackageReference Include="CommunityToolkit.WinUI.Converters" Version="8.2.250402" />
3535
<PackageReference Include="CommunityToolkit.WinUI.UI.Controls.DataGrid" Version="7.1.2" />
36-
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="9.0.1" />
37-
<PackageReference Include="Microsoft.Graph" Version="5.69.0" />
38-
<PackageReference Include="Microsoft.WindowsAppSDK" Version="1.6.250108002" />
36+
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="9.0.5" />
37+
<PackageReference Include="Microsoft.Graph" Version="5.79.0" />
38+
<PackageReference Include="Microsoft.WindowsAppSDK" Version="1.7.250513003" />
3939
<PackageReference Include="System.Linq.Async" Version="6.0.1" />
4040
</ItemGroup>
4141

MsGraphSamples.WinUI/Views/MainPage.xaml.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public void Receive(ImmutableSortedDictionary<string, DataGridSortDirection?> pr
4545
DirectoryObjectsGrid.Columns.Add(new DataGridTextColumn
4646
{
4747
Header = property.Key,
48-
Binding = new Binding() { Path = new PropertyPath(property.Key) },
48+
Binding = new Binding() { Path = new PropertyPath(property.Key), Converter = new CollectionToCommaSeparatedStringConverter() },
4949
SortDirection = property.Value,
5050
Width = new DataGridLength(1, DataGridLengthUnitType.Star)
5151
});

0 commit comments

Comments
 (0)