From 4fec7074e5a3dce7443e2b4ac3385a22f594a572 Mon Sep 17 00:00:00 2001 From: Vishal Omprasad Date: Tue, 26 Aug 2025 22:25:52 +0530 Subject: [PATCH 01/15] 977013 - WinU Kanban UG Getting Started - custom mapping feature --- winui/Kanban/getting-started.md | 416 +++++++++++++++++++++++--------- 1 file changed, 306 insertions(+), 110 deletions(-) diff --git a/winui/Kanban/getting-started.md b/winui/Kanban/getting-started.md index 759989ac6..67e751a96 100644 --- a/winui/Kanban/getting-started.md +++ b/winui/Kanban/getting-started.md @@ -57,18 +57,45 @@ public sealed partial class MainWindow : Window ## Populate WinUI Kanban item source -Here are the steps to render kanban card items using the WinUI Kanban control with the respective [KanbanModel](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.KanbanModel.html) class. +### Creating the default model tasks -* Create view model. -* Bind the item source for Kanban. +* **Define the View Model:** Create a view model class to set values for the properties listed in the [`KanbanModel`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.KanbanModel.html) class as shown in the following example code. Each [`KanbanModel`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.KanbanModel.html) instance represents a card in the Kanban control. +* **Bind item source for Kanban:** To populate the kanban card items, utilize the [`ItemsSource`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.SfKanban.html#Syncfusion_UI_Xaml_Kanban_SfKanban_ItemsSource) property of [`SfKanban`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.SfKanban.html). +* **Defining columns in the Kanban Board:** The columns are generated automatically based on the different values of the [`Category`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.KanbanModel.html#Syncfusion_UI_Xaml_Kanban_KanbanModel_Category) in the [`KanbanModel`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.KanbanModel.html) class from the [`ItemsSource`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.SfKanban.html#Syncfusion_UI_Xaml_Kanban_SfKanban_ItemsSource). However, you can manually define the columns by setting the [`AutoGenerateColumns`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.SfKanban.html#Syncfusion_UI_Xaml_Kanban_SfKanban_AutoGenerateColumns) property to `false` and adding [`KanbanColumn`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.KanbanColumn.html) instances to the [`Columns`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.SfKanban.html#Syncfusion_UI_Xaml_Kanban_SfKanban_Columns) property of [`SfKanban`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.SfKanban.html). You can define the column categories using the [`Categories`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.KanbanColumn.html#Syncfusion_UI_Xaml_Kanban_KanbanColumn_Categories) property of [`KanbanColumn`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.KanbanColumn.html), and the cards will be added to their respective columns. -### Create view model +The following sample code demonstrates this process in action: -Create a view model class to set values for the properties listed in the [KanbanModel](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.KanbanModel.html) class as shown in the following example code. Each [KanbanModel](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.KanbanModel.html) instance represents a card in the Kanban control. +{% tabs %} + +{% highlight XAML hl_lines="2 4 5 6 7" %} + + + + + + + + + + +{% endhighlight %} + +{% highlight C# hl_lines="1 4 5 6 7" %} + +this.kanban.AutoGenerateColumns = false; +this.kanban.ItemsSource = new KanbanViewModel().TaskDetails; + +this.kanban.Columns.Add(new KanbanColumn() { HeaderText = "To Do", Categories = "Open" }); +this.kanban.Columns.Add(new KanbanColumn() { HeaderText = "In Progress", Categories = "In Progress" }); +this.kanban.Columns.Add(new KanbanColumn() { HeaderText = "Done", Categories = "Done" }); -{% highlight C# tabtitle="ViewModel.cs" %} +{% endhighlight %} + +{% highlight C# tabtitle="KanbanViewModel.cs" %} -public class ViewModel +public class KanbanViewModel { #region Properties @@ -82,9 +109,9 @@ public class ViewModel #region Constructor /// - /// Initializes a new instance of the class. + /// Initializes a new instance of the class. /// - public ViewModel() + public KanbanViewModel() { this.TaskDetails = this.GetTaskDetails(); } @@ -148,7 +175,7 @@ public class ViewModel taskDetail.Title = "New Feature"; taskDetail.Id = "29574"; taskDetail.Description = "Dragging events support for Kanban"; - taskDetail.Category = "Closed"; + taskDetail.Category = "In Progress"; taskDetail.IndicatorColorKey = "Normal"; taskDetail.Tags = new List() { "New Control" }; taskDetail.Image = new Image @@ -162,7 +189,7 @@ public class ViewModel taskDetail.Title = "WF Issue"; taskDetail.Id = "1254"; taskDetail.Description = "HorizontalAlignment for tooltip is not working"; - taskDetail.Category = "Review"; + taskDetail.Category = "Done"; taskDetail.IndicatorColorKey = "High"; taskDetail.Tags = new List() { "Bug fixing" }; taskDetail.Image = new Image @@ -179,182 +206,351 @@ public class ViewModel {% endhighlight %} -### Bind item source for Kanban +{% endtabs %} + +![defining-columns-in-winui-kanban](images/getting-started/defining-columns-in-winui-kanban.png) + +### Creating the custom model tasks with data mapping + +You can also map custom model data to our Kanban. Here are the steps to render tasks using the [.NET MAUI Kanban](https://help.syncfusion.com/cr/maui/Syncfusion.Maui.Kanban.SfKanban.html) control with respective custom data properties. + +* **Define the the Custom Model:** Create a custom class `TaskDetails` with mandatory fields `Subject`, `Details`, and `Status` similar to the [`KanbanModel`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.KanbanModel.html) fields `Title`, `Description`, and `Category`.. +* **Define the the Custom View Model:** Create a `ViewModel` class with a collection property to hold instances of your custom model. Each custom model instance should represent a card in the Kanban control, similar to the [`KanbanModel`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.KanbanModel.html) instance provided by Syncfusion. +* **Bind the ViewModel:** Set the `ViewModel` instance as the `BindingContext` of your Page; this is done to bind properties of `ViewModel` to [`SfKanban`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.SfKanban.html). +* **Bind Data to the Kanban Board:** Assign the custom data collection to the [`ItemsSource`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.SfKanban.html#Syncfusion_UI_Xaml_Kanban_SfKanban_ItemsSource) property of [`SfKanban`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.SfKanban.html). Specify the property in your custom model that represents the column field (such as "Status") by setting the [`ColumnMappingPath`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.SfKanban.html#Syncfusion_UI_Xaml_Kanban_SfKanban_ColumnMappingPath) property. +* **Defining columns in the Kanban Board:** The [`Columns`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.SfKanban.html#Syncfusion_UI_Xaml_Kanban_SfKanban_Columns) are mapped based on the values of your specified column property (e.g., "Status") from the custom model, not [`Category`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.KanbanModel.html#Syncfusion_UI_Xaml_Kanban_KanbanModel_Category). You can allow columns to be generated automatically, or set [`AutoGenerateColumns`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.SfKanban.html#Syncfusion_UI_Xaml_Kanban_SfKanban_AutoGenerateColumns) to `false` and manually define columns using the required values from your custom data (for example, `Open`, `In Progress`, `Done`, etc.) in the [`Categories`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.KanbanColumn.html#Syncfusion_UI_Xaml_Kanban_KanbanColumn_Categories) property. -To populate the kanban card items, utilize the [ItemsSource](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.SfKanban.html#Syncfusion_UI_Xaml_Kanban_SfKanban_ItemsSource) property of [SfKanban](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.SfKanban.html). +Let’s look at the practical code example: {% tabs %} -{% highlight XAML hl_lines="2" %} +{% highlight XAML %} + AutoGenerateColumns="False" + ItemsSource="{Binding TaskDetails}" + ColumnMappingPath="Status"> - + + + + + + + + + + + + + + + + + + + + + + {% endhighlight %} {% highlight C# %} -this.kanban.ItemsSource = new ViewModel().TaskDetails; +this.kanban.AutoGenerateColumns = false; +this.kanban.ItemsSource = new KanbanViewModel().TaskDetails; +this.kanban.ColumnMappingPath="Status" + +this.kanban.Columns.Add(new KanbanColumn() { HeaderText = "To Do", Categories = "Open", "Postponed" }); +this.kanban.Columns.Add(new KanbanColumn() { HeaderText = "In Progress", Categories = "In Progress" }); +this.kanban.Columns.Add(new KanbanColumn() { HeaderText = "For Review", Categories = "Code Review" }); +this.kanban.Columns.Add(new KanbanColumn() { HeaderText = "Done", Categories = "Closed", "Closed No Changes", "Won't Fix" }); {% endhighlight %} -{% endtabs %} +{% highlight C# tabtitle="TaskDetails.cs" %} -![binding-item-source-in-winui-kanban](images/getting-started/binding-item-source-in-winui-kanban.png) +public class TaskDetails : INotifyPropertyChanged +{ + private string subject; -### Defining columns + private string details; -The columns are generated automatically based on the different values of the [Category](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.KanbanModel.html#Syncfusion_UI_Xaml_Kanban_KanbanModel_Category) in the [KanbanModel](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.KanbanModel.html) class from the [ItemsSource](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.SfKanban.html#Syncfusion_UI_Xaml_Kanban_SfKanban_ItemsSource). However, you can manually define the columns by setting the [AutoGenerateColumns](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.SfKanban.html#Syncfusion_UI_Xaml_Kanban_SfKanban_AutoGenerateColumns) property to `false` and adding [KanbanColumn](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.KanbanColumn.html) instances to the [Columns](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.SfKanban.html#Syncfusion_UI_Xaml_Kanban_SfKanban_Columns) property of [SfKanban](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.SfKanban.html). You can define the column categories using the [Categories](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.KanbanColumn.html#Syncfusion_UI_Xaml_Kanban_KanbanColumn_Categories) property of [KanbanColumn](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.KanbanColumn.html), and the cards will be added to their respective columns. + private object status; -{% tabs %} -{% highlight XAML hl_lines="2 4 5 6 7" %} + private string owner; - - - - - - - - + public TaskDetails() + { + subject = string.Empty; + details = string.Empty; + status = string.Empty; + owner = string.Empty; + Avatar = new Image(); + PriorityColor = string.Empty; + ReferenceNumber = string.Empty; + Labels = new List(); + } -{% endhighlight %} + public string Subject + { + get + { + return this.subject; + } -{% highlight C# hl_lines="1 4 5 6 7" %} + set + { + this.subject = value; + this.NotifyPropertyChanged("Subject"); + } + } -this.kanban.AutoGenerateColumns = false; -this.kanban.ItemsSource = new ViewModel().TaskDetails; + public string Details + { + get + { + return this.details; + } -this.kanban.Columns.Add(new KanbanColumn() { HeaderText = "To Do", Categories = "Open" }); -this.kanban.Columns.Add(new KanbanColumn() { HeaderText = "In Progress", Categories = "In Progress" }); -this.kanban.Columns.Add(new KanbanColumn() { HeaderText = "Done", Categories = "Done" }); + set + { + this.details = value; + this.NotifyPropertyChanged("Details"); + } + } -{% endhighlight %} + public object Status + { + get + { + return this.status; + } -{% highlight C# tabtitle="ViewModel.cs" %} - -public class ViewModel -{ - #region Properties + set + { + this.status = value; + this.NotifyPropertyChanged("Status"); + } + } - /// - /// Gets or sets the collection of objects representing tasks in various stages. - /// - public ObservableCollection TaskDetails { get; set; } + public string Owner + { + get + { + return this.owner; + } - #endregion + set + { + this.owner = value; + this.NotifyPropertyChanged("Owner"); + } + } - #region Constructor + public Image Avatar + { + get; set; + } - /// - /// Initializes a new instance of the class. - /// - public ViewModel() + public object PriorityColor { - this.TaskDetails = this.GetTaskDetails(); + get; set; } - #endregion + public object ReferenceNumber + { + get; set; + } - #region Private methods + public List Labels + { + get; set; + } - /// - /// Method to get the kanban model collections. - /// - /// The kanban model collections. - private ObservableCollection GetTaskDetails() + public event PropertyChangedEventHandler? PropertyChanged; + + internal void NotifyPropertyChanged(string propertyName) { - var taskDetails = new ObservableCollection(); + if (this.PropertyChanged != null) + { + this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); + } + } +} + +{% endhighlight %} + +{% highlight C# tabtitle="KanbanViewModel.cs" %} + +public class KanbanViewModel +{ + public ObservableCollection TaskDetails { get; set; } + + public KanbanViewModel() + { + this.TaskDetails = this.GetTaskDetails(); + } + + private ObservableCollection GetTaskDetails() + { + var taskDetails = new ObservableCollection(); string path = @"ms-appx:///"; - KanbanModel taskDetail = new KanbanModel(); - taskDetail.Title = "UWP Issue"; - taskDetail.Id = "651"; - taskDetail.Description = "Crosshair label template not visible in UWP"; - taskDetail.Category = "Open"; - taskDetail.IndicatorColorKey = "High"; - taskDetail.Tags = new List() { "Bug Fixing" }; - taskDetail.Image = new Image + TaskDetails taskDetail = new TaskDetails(); + taskDetail.Subject = "UWP Issue"; + taskDetail.Details = "Sorting is not working properly in DateTimeAxis"; + taskDetail.Status = "Postponed"; + taskDetail.ReferenceNumber = "6593"; + taskDetail.PriorityColor = "High"; + taskDetail.Labels = new List() { "Bug Fixing" }; + taskDetail.Avatar = new Image { - Source = new BitmapImage(new Uri("ms-appx:///Assets/Kanban/People_Circle1.png")) + Source = new BitmapImage(new Uri(path + "Assets/Kanban/People_Circle1.png")) }; taskDetails.Add(taskDetail); - taskDetail = new KanbanModel(); - taskDetail.Title = "WinUI Issue"; - taskDetail.Id = "646"; - taskDetail.Description = "AxisLabel cropped when rotating the axis label"; - taskDetail.Category = "Open"; - taskDetail.IndicatorColorKey = "Low"; - taskDetail.Tags = new List() { "Bug Fixing" }; - taskDetail.Image = new Image + taskDetail = new TaskDetails(); + taskDetail.Subject = "WPF Issue"; + taskDetail.Details = "Crosshair label template not visible in UWP"; + taskDetail.Status = "Open"; + taskDetail.ReferenceNumber = "6593"; + taskDetail.PriorityColor = "High"; + taskDetail.Labels = new List() { "Bug GanttControl" }; + taskDetail.Avatar = new Image { Source = new BitmapImage(new Uri(path + "Assets/Kanban/People_Circle2.png")) }; taskDetails.Add(taskDetail); - taskDetail = new KanbanModel(); - taskDetail.Title = "Kanban Feature"; - taskDetail.Id = "25678"; - taskDetail.Description = "Provide drag and drop support"; - taskDetail.Category = "In Progress"; - taskDetail.IndicatorColorKey = "Low"; - taskDetail.Tags = new List() { "New control" }; - taskDetail.Image = new Image + taskDetail = new TaskDetails(); + taskDetail.Subject = "WinUI Issue"; + taskDetail.Details = "AxisLabel cropped when rotating the axis label"; + taskDetail.Status = "In Progress"; + taskDetail.ReferenceNumber = "6593"; + taskDetail.PriorityColor = "High"; + taskDetail.Labels = new List() { "Bug processing" }; + taskDetail.Avatar = new Image { Source = new BitmapImage(new Uri(path + "Assets/Kanban/People_Circle3.png")) }; taskDetails.Add(taskDetail); - taskDetail = new KanbanModel(); - taskDetail.Title = "New Feature"; - taskDetail.Id = "29574"; - taskDetail.Description = "Dragging events support for Kanban"; - taskDetail.Category = "In Progress"; - taskDetail.IndicatorColorKey = "Normal"; - taskDetail.Tags = new List() { "New Control" }; - taskDetail.Image = new Image + taskDetail = new TaskDetails(); + taskDetail.Subject = "UWP Issue"; + taskDetail.ReferenceNumber = "651"; + taskDetail.Details = "Crosshair label template not visible in UWP"; + taskDetail.Status = "Open"; + taskDetail.PriorityColor = "High"; + taskDetail.Labels = new List() { "Bug Fixing" }; + taskDetail.Avatar = new Image { Source = new BitmapImage(new Uri(path + "Assets/Kanban/People_Circle4.png")) }; taskDetails.Add(taskDetail); - taskDetail = new KanbanModel(); - taskDetail.Title = "WF Issue"; - taskDetail.Id = "1254"; - taskDetail.Description = "HorizontalAlignment for tooltip is not working"; - taskDetail.Category = "Done"; - taskDetail.IndicatorColorKey = "High"; - taskDetail.Tags = new List() { "Bug fixing" }; - taskDetail.Image = new Image + taskDetail = new TaskDetails(); + taskDetail.Subject = "Kanban Feature"; + taskDetail.ReferenceNumber = "25678"; + taskDetail.Details = "Provide drag and drop support"; + taskDetail.Status = "In Progress"; + taskDetail.PriorityColor = "Low"; + taskDetail.Labels = new List() { "New control" }; + taskDetail.Avatar = new Image { Source = new BitmapImage(new Uri(path + "Assets/Kanban/People_Circle5.png")) }; taskDetails.Add(taskDetail); + + taskDetail = new TaskDetails(); + taskDetail.Subject = "WF Issue"; + taskDetail.ReferenceNumber = "1254"; + taskDetail.Details = "HorizontalAlignment for tooltip is not working"; + taskDetail.Status = "In Progress"; + taskDetail.PriorityColor = "High"; + taskDetail.Labels = new List() { "Bug fixing" }; + taskDetail.Avatar = new Image + { + Source = new BitmapImage(new Uri(path + "Assets/Kanban/People_Circle1.png")) + }; + + taskDetails.Add(taskDetail); + + taskDetail = new TaskDetails(); + taskDetail.Subject = "WPF Issue"; + taskDetail.ReferenceNumber = "28066"; + taskDetail.Details = "In minimized state, first and last segments have incorrect spacing"; + taskDetail.Status = "Code Review"; + taskDetail.PriorityColor = "Normal"; + taskDetail.Labels = new List() { "Bug Fixing" }; + taskDetail.Avatar = new Image + { + Source = new BitmapImage(new Uri(path + "Assets/Kanban/People_Circle2.png")) + }; + + taskDetails.Add(taskDetail); + + taskDetail = new TaskDetails(); + taskDetail.Subject = "WPF Issue"; + taskDetail.ReferenceNumber = "28066"; + taskDetail.Details = "In minimized state, first and last segments have incorrect spacing"; + taskDetail.Status = "Code Review"; + taskDetail.PriorityColor = "Normal"; + taskDetail.Labels = new List() { "Bug Fixing" }; + taskDetail.Avatar = new Image + { + Source = new BitmapImage(new Uri(path + "Assets/Kanban/People_Circle3.png")) + }; + + taskDetails.Add(taskDetail); + + taskDetail = new TaskDetails(); + taskDetail.Subject = "New Feature"; + taskDetail.ReferenceNumber = "29574"; + taskDetail.Details = "Dragging events support for Kanban"; + taskDetail.Status = "Closed"; + taskDetail.PriorityColor = "Normal"; + taskDetail.Labels = new List() { "New Control" }; + taskDetail.Avatar = new Image + { + Source = new BitmapImage(new Uri(path + "Assets/Kanban/People_Circle4.png")) + }; + + taskDetails.Add(taskDetail); + return taskDetails; } - - #endregion } {% endhighlight %} + {% endtabs %} N> When manually defining columns, ensure the [AutoGenerateColumns](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.SfKanban.html#Syncfusion_UI_Xaml_Kanban_SfKanban_AutoGenerateColumns) property of [SfKanban](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.SfKanban.html) is set to `false`. -![defining-columns-in-winui-kanban](images/getting-started/defining-columns-in-winui-kanban.png) - ## Theme The WinUI Kanban supports light and dark themes, automatically adjusting to the system's theme settings for a consistent and visually appealing experience in any environment. From ac291a65e72e539de721e440f83d605b93584a1a Mon Sep 17 00:00:00 2001 From: Vishal Omprasad Date: Tue, 26 Aug 2025 23:20:44 +0530 Subject: [PATCH 02/15] 977013 - Kanban UG getting started content corrections --- winui/Kanban/getting-started.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/winui/Kanban/getting-started.md b/winui/Kanban/getting-started.md index 67e751a96..628788777 100644 --- a/winui/Kanban/getting-started.md +++ b/winui/Kanban/getting-started.md @@ -59,7 +59,7 @@ public sealed partial class MainWindow : Window ### Creating the default model tasks -* **Define the View Model:** Create a view model class to set values for the properties listed in the [`KanbanModel`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.KanbanModel.html) class as shown in the following example code. Each [`KanbanModel`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.KanbanModel.html) instance represents a card in the Kanban control. +* **Define the View Model:** Create a view model class to set values for the properties listed in the [`KanbanModel`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.KanbanModel.html) instance. Each [`KanbanModel`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.KanbanModel.html) instance represents a card in the Kanban control. * **Bind item source for Kanban:** To populate the kanban card items, utilize the [`ItemsSource`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.SfKanban.html#Syncfusion_UI_Xaml_Kanban_SfKanban_ItemsSource) property of [`SfKanban`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.SfKanban.html). * **Defining columns in the Kanban Board:** The columns are generated automatically based on the different values of the [`Category`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.KanbanModel.html#Syncfusion_UI_Xaml_Kanban_KanbanModel_Category) in the [`KanbanModel`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.KanbanModel.html) class from the [`ItemsSource`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.SfKanban.html#Syncfusion_UI_Xaml_Kanban_SfKanban_ItemsSource). However, you can manually define the columns by setting the [`AutoGenerateColumns`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.SfKanban.html#Syncfusion_UI_Xaml_Kanban_SfKanban_AutoGenerateColumns) property to `false` and adding [`KanbanColumn`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.KanbanColumn.html) instances to the [`Columns`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.SfKanban.html#Syncfusion_UI_Xaml_Kanban_SfKanban_Columns) property of [`SfKanban`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.SfKanban.html). You can define the column categories using the [`Categories`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.KanbanColumn.html#Syncfusion_UI_Xaml_Kanban_KanbanColumn_Categories) property of [`KanbanColumn`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.KanbanColumn.html), and the cards will be added to their respective columns. From 0fa898fa9e9271c23962973868898b24431d92ac Mon Sep 17 00:00:00 2001 From: Vishal Omprasad Date: Tue, 26 Aug 2025 23:43:08 +0530 Subject: [PATCH 03/15] 977013 - Kanban Getting started UG Wrong link replaced --- winui/Kanban/getting-started.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/winui/Kanban/getting-started.md b/winui/Kanban/getting-started.md index 628788777..a8d62c49c 100644 --- a/winui/Kanban/getting-started.md +++ b/winui/Kanban/getting-started.md @@ -212,7 +212,7 @@ public class KanbanViewModel ### Creating the custom model tasks with data mapping -You can also map custom model data to our Kanban. Here are the steps to render tasks using the [.NET MAUI Kanban](https://help.syncfusion.com/cr/maui/Syncfusion.Maui.Kanban.SfKanban.html) control with respective custom data properties. +You can also map custom model data to our Kanban. Here are the steps to render tasks using the [WinUI Kanban](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Kanban.SfKanban.html) control with respective custom data properties. * **Define the the Custom Model:** Create a custom class `TaskDetails` with mandatory fields `Subject`, `Details`, and `Status` similar to the [`KanbanModel`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.KanbanModel.html) fields `Title`, `Description`, and `Category`.. * **Define the the Custom View Model:** Create a `ViewModel` class with a collection property to hold instances of your custom model. Each custom model instance should represent a card in the Kanban control, similar to the [`KanbanModel`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.KanbanModel.html) instance provided by Syncfusion. From 62f267d4fbd9273edb8f02baedba137381ee6c2e Mon Sep 17 00:00:00 2001 From: Vishal Omprasad Date: Tue, 26 Aug 2025 23:44:44 +0530 Subject: [PATCH 04/15] 977013 - Kanban Getting Started UG wrong API link replaced --- winui/Kanban/getting-started.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/winui/Kanban/getting-started.md b/winui/Kanban/getting-started.md index a8d62c49c..7e2509e11 100644 --- a/winui/Kanban/getting-started.md +++ b/winui/Kanban/getting-started.md @@ -212,7 +212,7 @@ public class KanbanViewModel ### Creating the custom model tasks with data mapping -You can also map custom model data to our Kanban. Here are the steps to render tasks using the [WinUI Kanban](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Kanban.SfKanban.html) control with respective custom data properties. +You can also map custom model data to our Kanban. Here are the steps to render tasks using the [WinUI Kanban](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.SfKanban.html) control with respective custom data properties. * **Define the the Custom Model:** Create a custom class `TaskDetails` with mandatory fields `Subject`, `Details`, and `Status` similar to the [`KanbanModel`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.KanbanModel.html) fields `Title`, `Description`, and `Category`.. * **Define the the Custom View Model:** Create a `ViewModel` class with a collection property to hold instances of your custom model. Each custom model instance should represent a card in the Kanban control, similar to the [`KanbanModel`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.KanbanModel.html) instance provided by Syncfusion. From b860c5583830b1febb20c8ec5c64b8761e599fa4 Mon Sep 17 00:00:00 2001 From: Vishal Omprasad Date: Tue, 26 Aug 2025 23:45:56 +0530 Subject: [PATCH 05/15] 977013 - Kanban UG Getting Started - unwanted period removed --- winui/Kanban/getting-started.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/winui/Kanban/getting-started.md b/winui/Kanban/getting-started.md index 7e2509e11..63ea65b41 100644 --- a/winui/Kanban/getting-started.md +++ b/winui/Kanban/getting-started.md @@ -214,7 +214,7 @@ public class KanbanViewModel You can also map custom model data to our Kanban. Here are the steps to render tasks using the [WinUI Kanban](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.SfKanban.html) control with respective custom data properties. -* **Define the the Custom Model:** Create a custom class `TaskDetails` with mandatory fields `Subject`, `Details`, and `Status` similar to the [`KanbanModel`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.KanbanModel.html) fields `Title`, `Description`, and `Category`.. +* **Define the the Custom Model:** Create a custom class `TaskDetails` with mandatory fields `Subject`, `Details`, and `Status` similar to the [`KanbanModel`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.KanbanModel.html) fields `Title`, `Description`, and `Category`. * **Define the the Custom View Model:** Create a `ViewModel` class with a collection property to hold instances of your custom model. Each custom model instance should represent a card in the Kanban control, similar to the [`KanbanModel`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.KanbanModel.html) instance provided by Syncfusion. * **Bind the ViewModel:** Set the `ViewModel` instance as the `BindingContext` of your Page; this is done to bind properties of `ViewModel` to [`SfKanban`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.SfKanban.html). * **Bind Data to the Kanban Board:** Assign the custom data collection to the [`ItemsSource`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.SfKanban.html#Syncfusion_UI_Xaml_Kanban_SfKanban_ItemsSource) property of [`SfKanban`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.SfKanban.html). Specify the property in your custom model that represents the column field (such as "Status") by setting the [`ColumnMappingPath`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.SfKanban.html#Syncfusion_UI_Xaml_Kanban_SfKanban_ColumnMappingPath) property. From c93c13980fd82b7d4b311ca15add37cec3b8f6f6 Mon Sep 17 00:00:00 2001 From: Sudharsan Narayanan Date: Sun, 31 Aug 2025 14:11:18 +0530 Subject: [PATCH 06/15] Commit the rough --- winui/ComboBox/Searching.md | 25 +++++++++++++++++++++++++ winui/ComboBox/Selection.md | 9 +++++++++ 2 files changed, 34 insertions(+) diff --git a/winui/ComboBox/Searching.md b/winui/ComboBox/Searching.md index 2bf22fb54..6555ade7b 100644 --- a/winui/ComboBox/Searching.md +++ b/winui/ComboBox/Searching.md @@ -99,6 +99,31 @@ The `ComboBox` control provides support to auto append the text based on data so N> Auto appending of text is supported only in `Editable` mode and `TextSearchMode` property should be `StartsWith`. +## Diacritic Option + +The `IgnoreDiacritic` option allows string comparison and search operations to treat characters with diacritical marks (accents) as equivalent to their base characters. This is useful for linguistic normalization, search indexing, and user-friendly matching across languages. Enable or disable the diacritic sensitivity using the `IgnoreDiacritic` property. The following code example demonstrates how to enable the diacritic sensitivity. + +{% tabs %} +{% highlight xaml %} + + + +{% endhighlight %} + +{% highlight C# %} + +comboBox.IgnoreDiacritic = "false"; + +{% endhighlight %} +{% endtabs %} + + ## Search Mode The `TextSearchMode` property of the `ComboBox` can be used to regulate how the control behaves when it receives user input. The default text searching type is `StartsWith`, ignoring accent and it is case insensitive. The available text search modes are, diff --git a/winui/ComboBox/Selection.md b/winui/ComboBox/Selection.md index a54db849a..153ed6e54 100644 --- a/winui/ComboBox/Selection.md +++ b/winui/ComboBox/Selection.md @@ -324,4 +324,13 @@ private async void OnComboBoxSelectionChanged(object sender, ComboBoxSelectionC {% endhighlight %} {% endtabs %} +## Selection changing notification + +The SelectionChanging event occurs before the items is being selected. This is a cancelable event. This argument contains the following information: + + * `AddedItems` - Contains the items that were selected. + * `RemovedItems` - Contains the items that were unselected. + * `AllowDetachSelection` - Gets or sets a value indicating whether the selected item in the list should be displayed or not. + * `Cancel` - Gets or sets a value that indicates whether the selection should be canceled or not. + ![WinUI ComboBox selection change notification](Selection_images/winui-combobox-selection-change-notification.png) From 7b57d08c72c58fc2208726709d407e931f63d733 Mon Sep 17 00:00:00 2001 From: Sudharsan Narayanan Date: Sun, 31 Aug 2025 22:34:52 +0530 Subject: [PATCH 07/15] Address the concerns --- winui/ComboBox/Searching.md | 4 ++-- winui/ComboBox/Selection.md | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/winui/ComboBox/Searching.md b/winui/ComboBox/Searching.md index 6555ade7b..a7a6c9365 100644 --- a/winui/ComboBox/Searching.md +++ b/winui/ComboBox/Searching.md @@ -99,9 +99,9 @@ The `ComboBox` control provides support to auto append the text based on data so N> Auto appending of text is supported only in `Editable` mode and `TextSearchMode` property should be `StartsWith`. -## Diacritic Option +## Diacritic aware search -The `IgnoreDiacritic` option allows string comparison and search operations to treat characters with diacritical marks (accents) as equivalent to their base characters. This is useful for linguistic normalization, search indexing, and user-friendly matching across languages. Enable or disable the diacritic sensitivity using the `IgnoreDiacritic` property. The following code example demonstrates how to enable the diacritic sensitivity. +The `IgnoreDiacritic` option allows string comparison and search operations to treat characters with diacritical marks (accents) as equivalent to their base characters. This is useful for search indexing, and user-friendly matching across languages. By default, Diacritic is not considered. Enable or disable the diacritic sensitivity using the `IgnoreDiacritic` property. The following code example demonstrates how to enable the diacritic sensitivity. {% tabs %} {% highlight xaml %} diff --git a/winui/ComboBox/Selection.md b/winui/ComboBox/Selection.md index 153ed6e54..210675e66 100644 --- a/winui/ComboBox/Selection.md +++ b/winui/ComboBox/Selection.md @@ -326,11 +326,11 @@ private async void OnComboBoxSelectionChanged(object sender, ComboBoxSelectionC ## Selection changing notification -The SelectionChanging event occurs before the items is being selected. This is a cancelable event. This argument contains the following information: +The `SelectionChanging` event occurs before processing the selection. This is a cancelable event. This argument contains the following information: * `AddedItems` - Contains the items that were selected. * `RemovedItems` - Contains the items that were unselected. - * `AllowDetachSelection` - Gets or sets a value indicating whether the selected item in the list should be displayed or not. + * `AllowDetachedSelection` - Gets or sets a value indicating whether the selected item in the list should be displayed or not. * `Cancel` - Gets or sets a value that indicates whether the selection should be canceled or not. ![WinUI ComboBox selection change notification](Selection_images/winui-combobox-selection-change-notification.png) From 5637b593d45f1f521529d19fdb74a333223824e5 Mon Sep 17 00:00:00 2001 From: Vishal Omprasad Date: Tue, 2 Sep 2025 12:09:47 +0530 Subject: [PATCH 08/15] 977013 - WinUI Kanban Getting-Started.md file review corrections addressed --- winui/Kanban/getting-started.md | 297 +++++++------------------------- 1 file changed, 62 insertions(+), 235 deletions(-) diff --git a/winui/Kanban/getting-started.md b/winui/Kanban/getting-started.md index 63ea65b41..e4fdf80cc 100644 --- a/winui/Kanban/getting-started.md +++ b/winui/Kanban/getting-started.md @@ -59,15 +59,22 @@ public sealed partial class MainWindow : Window ### Creating the default model tasks -* **Define the View Model:** Create a view model class to set values for the properties listed in the [`KanbanModel`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.KanbanModel.html) instance. Each [`KanbanModel`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.KanbanModel.html) instance represents a card in the Kanban control. -* **Bind item source for Kanban:** To populate the kanban card items, utilize the [`ItemsSource`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.SfKanban.html#Syncfusion_UI_Xaml_Kanban_SfKanban_ItemsSource) property of [`SfKanban`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.SfKanban.html). +* **Define the View Model:** + +Create a view model class to set values for the properties listed in the [`KanbanModel`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.KanbanModel.html) class as shown in the following example code. Each [`KanbanModel`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.KanbanModel.html) instance represent a card in Kanban control. + +* **Bind item source for Kanban:** + +To populate the kanban card items, utilize the [`ItemsSource`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.SfKanban.html#Syncfusion_UI_Xaml_Kanban_SfKanban_ItemsSource) property of [`SfKanban`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.SfKanban.html). + + * **Defining columns in the Kanban Board:** The columns are generated automatically based on the different values of the [`Category`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.KanbanModel.html#Syncfusion_UI_Xaml_Kanban_KanbanModel_Category) in the [`KanbanModel`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.KanbanModel.html) class from the [`ItemsSource`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.SfKanban.html#Syncfusion_UI_Xaml_Kanban_SfKanban_ItemsSource). However, you can manually define the columns by setting the [`AutoGenerateColumns`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.SfKanban.html#Syncfusion_UI_Xaml_Kanban_SfKanban_AutoGenerateColumns) property to `false` and adding [`KanbanColumn`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.KanbanColumn.html) instances to the [`Columns`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.SfKanban.html#Syncfusion_UI_Xaml_Kanban_SfKanban_Columns) property of [`SfKanban`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.SfKanban.html). You can define the column categories using the [`Categories`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.KanbanColumn.html#Syncfusion_UI_Xaml_Kanban_KanbanColumn_Categories) property of [`KanbanColumn`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.KanbanColumn.html), and the cards will be added to their respective columns. The following sample code demonstrates this process in action: {% tabs %} -{% highlight XAML hl_lines="2 4 5 6 7" %} +{% highlight XAML hl_lines="2, 4, 5, 6, 7, 8, 9" %} @@ -240,161 +260,42 @@ Let’s look at the practical code example: Background="Gray" Padding="10,10,10,10"> - - + HorizontalAlignment="Stretch" /> - - - - - - - - - {% endhighlight %} {% highlight C# %} -this.kanban.AutoGenerateColumns = false; -this.kanban.ItemsSource = new KanbanViewModel().TaskDetails; -this.kanban.ColumnMappingPath="Status" +KanbanViewModel viewModel = new KanbanViewModel(); -this.kanban.Columns.Add(new KanbanColumn() { HeaderText = "To Do", Categories = "Open", "Postponed" }); -this.kanban.Columns.Add(new KanbanColumn() { HeaderText = "In Progress", Categories = "In Progress" }); -this.kanban.Columns.Add(new KanbanColumn() { HeaderText = "For Review", Categories = "Code Review" }); -this.kanban.Columns.Add(new KanbanColumn() { HeaderText = "Done", Categories = "Closed", "Closed No Changes", "Won't Fix" }); +this.kanban.DataContext = viewModel; +this.kanban.ItemsSource = viewModel.TaskDetails; + +this.kanban.ColumnMappingPath = "Status"; {% endhighlight %} {% highlight C# tabtitle="TaskDetails.cs" %} -public class TaskDetails : INotifyPropertyChanged +public class TaskDetails { - private string subject; - - private string details; - - private object status; - - private string owner; - - public TaskDetails() - { - subject = string.Empty; - details = string.Empty; - status = string.Empty; - owner = string.Empty; - Avatar = new Image(); - PriorityColor = string.Empty; - ReferenceNumber = string.Empty; - Labels = new List(); - } - - public string Subject - { - get - { - return this.subject; - } - - set - { - this.subject = value; - this.NotifyPropertyChanged("Subject"); - } - } - - public string Details - { - get - { - return this.details; - } - - set - { - this.details = value; - this.NotifyPropertyChanged("Details"); - } - } - - public object Status - { - get - { - return this.status; - } - - set - { - this.status = value; - this.NotifyPropertyChanged("Status"); - } - } - - public string Owner - { - get - { - return this.owner; - } - - set - { - this.owner = value; - this.NotifyPropertyChanged("Owner"); - } - } - - public Image Avatar - { - get; set; - } - - public object PriorityColor - { - get; set; - } - - public object ReferenceNumber - { - get; set; - } - - public List Labels - { - get; set; - } - - public event PropertyChangedEventHandler? PropertyChanged; - - internal void NotifyPropertyChanged(string propertyName) - { - if (this.PropertyChanged != null) - { - this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); - } - } + public string Title { get; set; } + public string Description { get; set; } + public object Status { get; set; } } {% endhighlight %} @@ -413,132 +314,58 @@ public class KanbanViewModel private ObservableCollection GetTaskDetails() { var taskDetails = new ObservableCollection(); - string path = @"ms-appx:///"; TaskDetails taskDetail = new TaskDetails(); - taskDetail.Subject = "UWP Issue"; - taskDetail.Details = "Sorting is not working properly in DateTimeAxis"; + taskDetail.Title = "UWP Issue"; + taskDetail.Description = "Sorting is not working properly in DateTimeAxis"; taskDetail.Status = "Postponed"; - taskDetail.ReferenceNumber = "6593"; - taskDetail.PriorityColor = "High"; - taskDetail.Labels = new List() { "Bug Fixing" }; - taskDetail.Avatar = new Image - { - Source = new BitmapImage(new Uri(path + "Assets/Kanban/People_Circle1.png")) - }; - taskDetails.Add(taskDetail); taskDetail = new TaskDetails(); - taskDetail.Subject = "WPF Issue"; - taskDetail.Details = "Crosshair label template not visible in UWP"; + taskDetail.Title = "WPF Issue"; + taskDetail.Description = "Crosshair label template not visible in UWP"; taskDetail.Status = "Open"; - taskDetail.ReferenceNumber = "6593"; - taskDetail.PriorityColor = "High"; - taskDetail.Labels = new List() { "Bug GanttControl" }; - taskDetail.Avatar = new Image - { - Source = new BitmapImage(new Uri(path + "Assets/Kanban/People_Circle2.png")) - }; - taskDetails.Add(taskDetail); taskDetail = new TaskDetails(); - taskDetail.Subject = "WinUI Issue"; - taskDetail.Details = "AxisLabel cropped when rotating the axis label"; + taskDetail.Title = "WinUI Issue"; + taskDetail.Description = "AxisLabel cropped when rotating the axis label"; taskDetail.Status = "In Progress"; - taskDetail.ReferenceNumber = "6593"; - taskDetail.PriorityColor = "High"; - taskDetail.Labels = new List() { "Bug processing" }; - taskDetail.Avatar = new Image - { - Source = new BitmapImage(new Uri(path + "Assets/Kanban/People_Circle3.png")) - }; - taskDetails.Add(taskDetail); taskDetail = new TaskDetails(); - taskDetail.Subject = "UWP Issue"; - taskDetail.ReferenceNumber = "651"; - taskDetail.Details = "Crosshair label template not visible in UWP"; - taskDetail.Status = "Open"; - taskDetail.PriorityColor = "High"; - taskDetail.Labels = new List() { "Bug Fixing" }; - taskDetail.Avatar = new Image - { - Source = new BitmapImage(new Uri(path + "Assets/Kanban/People_Circle4.png")) - }; - + taskDetail.Title = "UWP Issue"; + taskDetail.Description = "Crosshair label template not visible in UWP"; taskDetails.Add(taskDetail); taskDetail = new TaskDetails(); - taskDetail.Subject = "Kanban Feature"; - taskDetail.ReferenceNumber = "25678"; - taskDetail.Details = "Provide drag and drop support"; + taskDetail.Title = "Kanban Feature"; + taskDetail.Description = "Provide drag and drop support"; taskDetail.Status = "In Progress"; - taskDetail.PriorityColor = "Low"; - taskDetail.Labels = new List() { "New control" }; - taskDetail.Avatar = new Image - { - Source = new BitmapImage(new Uri(path + "Assets/Kanban/People_Circle5.png")) - }; - taskDetails.Add(taskDetail); taskDetail = new TaskDetails(); - taskDetail.Subject = "WF Issue"; - taskDetail.ReferenceNumber = "1254"; - taskDetail.Details = "HorizontalAlignment for tooltip is not working"; + taskDetail.Title = "WF Issue"; + taskDetail.Description = "HorizontalAlignment for tooltip is not working"; taskDetail.Status = "In Progress"; - taskDetail.PriorityColor = "High"; - taskDetail.Labels = new List() { "Bug fixing" }; - taskDetail.Avatar = new Image - { - Source = new BitmapImage(new Uri(path + "Assets/Kanban/People_Circle1.png")) - }; - taskDetails.Add(taskDetail); taskDetail = new TaskDetails(); - taskDetail.Subject = "WPF Issue"; - taskDetail.ReferenceNumber = "28066"; - taskDetail.Details = "In minimized state, first and last segments have incorrect spacing"; + taskDetail.Title = "WPF Issue"; + taskDetail.Description = "In minimized state, first and last segments have incorrect spacing"; taskDetail.Status = "Code Review"; - taskDetail.PriorityColor = "Normal"; - taskDetail.Labels = new List() { "Bug Fixing" }; - taskDetail.Avatar = new Image - { - Source = new BitmapImage(new Uri(path + "Assets/Kanban/People_Circle2.png")) - }; - taskDetails.Add(taskDetail); taskDetail = new TaskDetails(); - taskDetail.Subject = "WPF Issue"; - taskDetail.ReferenceNumber = "28066"; - taskDetail.Details = "In minimized state, first and last segments have incorrect spacing"; + taskDetail.Title = "WPF Issue"; + taskDetail.Description = "In minimized state, first and last segments have incorrect spacing"; taskDetail.Status = "Code Review"; - taskDetail.PriorityColor = "Normal"; - taskDetail.Labels = new List() { "Bug Fixing" }; - taskDetail.Avatar = new Image - { - Source = new BitmapImage(new Uri(path + "Assets/Kanban/People_Circle3.png")) - }; - taskDetails.Add(taskDetail); taskDetail = new TaskDetails(); - taskDetail.Subject = "New Feature"; - taskDetail.ReferenceNumber = "29574"; - taskDetail.Details = "Dragging events support for Kanban"; + taskDetail.Title = "New Feature"; + taskDetail.Description = "Dragging events support for Kanban"; taskDetail.Status = "Closed"; - taskDetail.PriorityColor = "Normal"; - taskDetail.Labels = new List() { "New Control" }; - taskDetail.Avatar = new Image - { - Source = new BitmapImage(new Uri(path + "Assets/Kanban/People_Circle4.png")) - }; - taskDetails.Add(taskDetail); return taskDetails; From 83aa7251d161e00ac035aba2d3886d7bde7e988b Mon Sep 17 00:00:00 2001 From: Vishal Omprasad Date: Tue, 2 Sep 2025 13:50:06 +0530 Subject: [PATCH 09/15] 977013 - Kanban Getting Started unwanted content removed --- winui/Kanban/getting-started.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/winui/Kanban/getting-started.md b/winui/Kanban/getting-started.md index e4fdf80cc..4feb5fd93 100644 --- a/winui/Kanban/getting-started.md +++ b/winui/Kanban/getting-started.md @@ -239,7 +239,7 @@ The [ColumnMappingPath](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml. The [`Columns`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.SfKanban.html#Syncfusion_UI_Xaml_Kanban_SfKanban_Columns) in the Kanban board are mapped based on the values of a specified property (e.g., "Status") from your custom data model. The [ColumnMappingPath](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.SfKanban.html#Syncfusion_UI_Xaml_Kanban_SfKanban_ColumnMappingPath) specifies the name of the property within the data object that is used to generate columns in the Kanban control when [`AutoGenerateColumns`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.SfKanban.html#Syncfusion_UI_Xaml_Kanban_SfKanban_AutoGenerateColumns) is set to `true`. -Alternatively, you can manually define columns by setting [`AutoGenerateColumns`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.SfKanban.html#Syncfusion_UI_Xaml_Kanban_SfKanban_AutoGenerateColumns) to `false` and adding instances of [`KanbanColumn`](https://help.syncfusion.com/cr/maui/Syncfusion.Maui.Kanban.KanbanColumn.html) to the [`Columns`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.SfKanban.html#Syncfusion_UI_Xaml_Kanban_SfKanban_Columns) collection of the [`SfKanban`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.SfKanban.html) control. Based on the property specified in [ColumnMappingPath](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.SfKanban.html#Syncfusion_UI_Xaml_Kanban_SfKanban_ColumnMappingPath), the Kanban control will generate the columns and render the corresponding cards accordingly.html#Syncfusion_UI_Xaml_Kanban_KanbanColumn_Categories) property. +Alternatively, you can manually define columns by setting [`AutoGenerateColumns`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.SfKanban.html#Syncfusion_UI_Xaml_Kanban_SfKanban_AutoGenerateColumns) to `false` and adding instances of [`KanbanColumn`](https://help.syncfusion.com/cr/maui/Syncfusion.Maui.Kanban.KanbanColumn.html) to the [`Columns`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.SfKanban.html#Syncfusion_UI_Xaml_Kanban_SfKanban_Columns) collection of the [`SfKanban`](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.SfKanban.html) control. Based on the property specified in [ColumnMappingPath](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.SfKanban.html#Syncfusion_UI_Xaml_Kanban_SfKanban_ColumnMappingPath), the Kanban control will generate the columns and render the corresponding cards accordingly. Let’s look at the practical code example: From 10ec61eff6872dee4e752b75839215d02ab46e2a Mon Sep 17 00:00:00 2001 From: Vishal Omprasad Date: Tue, 2 Sep 2025 14:08:05 +0530 Subject: [PATCH 10/15] 977013 - Kanban UG getting-Started.md file code snippet highlighted --- winui/Kanban/getting-started.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/winui/Kanban/getting-started.md b/winui/Kanban/getting-started.md index 4feb5fd93..90768d431 100644 --- a/winui/Kanban/getting-started.md +++ b/winui/Kanban/getting-started.md @@ -245,7 +245,7 @@ Let’s look at the practical code example: {% tabs %} -{% highlight XAML %} +{% highlight XAML hl_lines="2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27" %} Date: Tue, 2 Sep 2025 14:53:29 +0530 Subject: [PATCH 11/15] 977013 - Content added and review corrections addressed --- winui/Kanban/getting-started.md | 80 +++++++++------------------------ 1 file changed, 21 insertions(+), 59 deletions(-) diff --git a/winui/Kanban/getting-started.md b/winui/Kanban/getting-started.md index 90768d431..832555d96 100644 --- a/winui/Kanban/getting-started.md +++ b/winui/Kanban/getting-started.md @@ -57,6 +57,8 @@ public sealed partial class MainWindow : Window ## Populate WinUI Kanban item source +This section explains how to populate the .NET MAUI Kanban control's `ItemSource` by creating and binding both default and custom task data models. + ### Creating the default model tasks * **Define the View Model:** @@ -73,7 +75,6 @@ To populate the kanban card items, utilize the [`ItemsSource`](https://help.sync The following sample code demonstrates this process in action: {% tabs %} - {% highlight XAML hl_lines="2, 4, 5, 6, 7, 8, 9" %} - + {% endhighlight %} +{% highlight C# hl_lines="1, 2, 3, 4, 5" %} -{% highlight C# hl_lines="1, 3, 4, 5, 7, 8, 9" %} - -KanbanViewModel viewModel = new KanbanViewModel(); - -this.kanban.DataContext = viewModel; this.kanban.AutoGenerateColumns = false; -this.kanban.ItemsSource = viewModel.TaskDetails; - +this.kanban.ItemsSource = new ViewModel().TaskDetails; this.kanban.Columns.Add(new KanbanColumn() { HeaderText = "To Do", Categories = "Open" }); this.kanban.Columns.Add(new KanbanColumn() { HeaderText = "In Progress", Categories = "In Progress" }); this.kanban.Columns.Add(new KanbanColumn() { HeaderText = "Done", Categories = "Done" }); {% endhighlight %} - -{% highlight C# tabtitle="KanbanViewModel.cs" %} +{% highlight C# tabtitle="ViewModel.cs" %} -public class KanbanViewModel +public class ViewModel { #region Properties @@ -119,9 +114,9 @@ public class KanbanViewModel #region Constructor /// - /// Initializes a new instance of the class. + /// Initializes a new instance of the class. /// - public KanbanViewModel() + public ViewModel() { this.TaskDetails = this.GetTaskDetails(); } @@ -215,7 +210,6 @@ public class KanbanViewModel } {% endhighlight %} - {% endtabs %} ![defining-columns-in-winui-kanban](images/getting-started/defining-columns-in-winui-kanban.png) @@ -244,14 +238,13 @@ Alternatively, you can manually define columns by setting [`AutoGenerateColumns` Let’s look at the practical code example: {% tabs %} - {% highlight XAML hl_lines="2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27" %} - + @@ -277,18 +270,12 @@ Let’s look at the practical code example: {% endhighlight %} +{% highlight C# hl_lines="1, 2" %} -{% highlight C# hl_lines="1, 3, 4, 6" %} - -KanbanViewModel viewModel = new KanbanViewModel(); - -this.kanban.DataContext = viewModel; -this.kanban.ItemsSource = viewModel.TaskDetails; - +this.kanban.ItemsSource = new ViewModel().TaskDetails; this.kanban.ColumnMappingPath = "Status"; {% endhighlight %} - {% highlight C# tabtitle="TaskDetails.cs" %} public class TaskDetails @@ -299,14 +286,13 @@ public class TaskDetails } {% endhighlight %} +{% highlight C# tabtitle="ViewModel.cs" %} -{% highlight C# tabtitle="KanbanViewModel.cs" %} - -public class KanbanViewModel +public class ViewModel { public ObservableCollection TaskDetails { get; set; } - public KanbanViewModel() + public ViewModel() { this.TaskDetails = this.GetTaskDetails(); } @@ -317,12 +303,6 @@ public class KanbanViewModel TaskDetails taskDetail = new TaskDetails(); taskDetail.Title = "UWP Issue"; - taskDetail.Description = "Sorting is not working properly in DateTimeAxis"; - taskDetail.Status = "Postponed"; - taskDetails.Add(taskDetail); - - taskDetail = new TaskDetails(); - taskDetail.Title = "WPF Issue"; taskDetail.Description = "Crosshair label template not visible in UWP"; taskDetail.Status = "Open"; taskDetails.Add(taskDetail); @@ -330,12 +310,7 @@ public class KanbanViewModel taskDetail = new TaskDetails(); taskDetail.Title = "WinUI Issue"; taskDetail.Description = "AxisLabel cropped when rotating the axis label"; - taskDetail.Status = "In Progress"; - taskDetails.Add(taskDetail); - - taskDetail = new TaskDetails(); - taskDetail.Title = "UWP Issue"; - taskDetail.Description = "Crosshair label template not visible in UWP"; + taskDetail.Status = "Open"; taskDetails.Add(taskDetail); taskDetail = new TaskDetails(); @@ -345,27 +320,15 @@ public class KanbanViewModel taskDetails.Add(taskDetail); taskDetail = new TaskDetails(); - taskDetail.Title = "WF Issue"; - taskDetail.Description = "HorizontalAlignment for tooltip is not working"; + taskDetail.Title = "New Feature"; + taskDetail.Description = "ragging events support for Kanban"; taskDetail.Status = "In Progress"; taskDetails.Add(taskDetail); taskDetail = new TaskDetails(); - taskDetail.Title = "WPF Issue"; - taskDetail.Description = "In minimized state, first and last segments have incorrect spacing"; - taskDetail.Status = "Code Review"; - taskDetails.Add(taskDetail); - - taskDetail = new TaskDetails(); - taskDetail.Title = "WPF Issue"; - taskDetail.Description = "In minimized state, first and last segments have incorrect spacing"; - taskDetail.Status = "Code Review"; - taskDetails.Add(taskDetail); - - taskDetail = new TaskDetails(); - taskDetail.Title = "New Feature"; - taskDetail.Description = "Dragging events support for Kanban"; - taskDetail.Status = "Closed"; + taskDetail.Title = "WF Issue"; + taskDetail.Description = "HorizontalAlignment for tooltip is not working"; + taskDetail.Status = "Done"; taskDetails.Add(taskDetail); return taskDetails; @@ -373,7 +336,6 @@ public class KanbanViewModel } {% endhighlight %} - {% endtabs %} N> When manually defining columns, ensure the [AutoGenerateColumns](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.SfKanban.html#Syncfusion_UI_Xaml_Kanban_SfKanban_AutoGenerateColumns) property of [SfKanban](https://help.syncfusion.com/cr/winui/Syncfusion.UI.Xaml.Kanban.SfKanban.html) is set to `false`. From 1ce13df80501985066eba0433c8ec1965ed1d3cc Mon Sep 17 00:00:00 2001 From: Vishal Omprasad Date: Tue, 2 Sep 2025 15:12:36 +0530 Subject: [PATCH 12/15] 977013 - Kanban view model name space added --- winui/Kanban/getting-started.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/winui/Kanban/getting-started.md b/winui/Kanban/getting-started.md index 832555d96..8d8658dad 100644 --- a/winui/Kanban/getting-started.md +++ b/winui/Kanban/getting-started.md @@ -100,6 +100,8 @@ this.kanban.Columns.Add(new KanbanColumn() { HeaderText = "Done", Categories = " {% endhighlight %} {% highlight C# tabtitle="ViewModel.cs" %} +using Syncfusion.UI.Xaml.Kanban; + public class ViewModel { #region Properties From 40eadcfa11eae0cf10f7fbe04391f545563ebf23 Mon Sep 17 00:00:00 2001 From: Sudharsan Narayanan Date: Tue, 2 Sep 2025 17:57:47 +0530 Subject: [PATCH 13/15] Added the image and code snippet --- winui/ComboBox/Searching.md | 3 +- .../winui-combobox-diacriticimage.png | Bin 0 -> 67040 bytes winui/ComboBox/Selection.md | 34 ++++++++++++++++-- 3 files changed, 33 insertions(+), 4 deletions(-) create mode 100644 winui/ComboBox/Searching_images/winui-combobox-diacriticimage.png diff --git a/winui/ComboBox/Searching.md b/winui/ComboBox/Searching.md index a7a6c9365..eee0b562e 100644 --- a/winui/ComboBox/Searching.md +++ b/winui/ComboBox/Searching.md @@ -101,7 +101,7 @@ N> Auto appending of text is supported only in `Editable` mode and `TextSearchMo ## Diacritic aware search -The `IgnoreDiacritic` option allows string comparison and search operations to treat characters with diacritical marks (accents) as equivalent to their base characters. This is useful for search indexing, and user-friendly matching across languages. By default, Diacritic is not considered. Enable or disable the diacritic sensitivity using the `IgnoreDiacritic` property. The following code example demonstrates how to enable the diacritic sensitivity. +The `IgnoreDiacritic` option allows string comparison and search operations to treat characters with diacritical marks as equivalent to their base characters. This is useful for search indexing, and user-friendly matching across languages. By default, Diacritic is not considered. Enable or disable the diacritic sensitivity using the `IgnoreDiacritic` property. The following code example demonstrates how to enable the diacritic sensitivity. {% tabs %} {% highlight xaml %} @@ -123,6 +123,7 @@ comboBox.IgnoreDiacritic = "false"; {% endhighlight %} {% endtabs %} +![WinUI ComboBox search the items based on Diacritic word/char in the edit field](Searching_images/winui-combobox-diacriticimage.png) ## Search Mode diff --git a/winui/ComboBox/Searching_images/winui-combobox-diacriticimage.png b/winui/ComboBox/Searching_images/winui-combobox-diacriticimage.png new file mode 100644 index 0000000000000000000000000000000000000000..ba88c97ca1a3ef0a5a04ced6b4c822c508fd25c3 GIT binary patch literal 67040 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 + +{% endhighlight %} + +{% highlight C# %} + +comboBox.SelectionChanging += OnComboBoxSelectionChanging; + +private void OnComboBoxSelectionChanging(object sender, Syncfusion.UI.Xaml.Editors.ComboBoxSelectionChangingEventArgs e) +{ + e.AllowDetachedSelection = true; + + e.Cancel = true; +} + +{% endhighlight %} + + {% endtabs %} + ![WinUI ComboBox selection change notification](Selection_images/winui-combobox-selection-change-notification.png) From feb35361930c3a56ebea78372bd8614045eddf8c Mon Sep 17 00:00:00 2001 From: Sudharsan Narayanan Date: Tue, 2 Sep 2025 18:32:42 +0530 Subject: [PATCH 14/15] Address the concerns --- winui/ComboBox/Selection.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/winui/ComboBox/Selection.md b/winui/ComboBox/Selection.md index 1474aa2ec..518e50061 100644 --- a/winui/ComboBox/Selection.md +++ b/winui/ComboBox/Selection.md @@ -324,6 +324,8 @@ private async void OnComboBoxSelectionChanged(object sender, ComboBoxSelectionC {% endhighlight %} {% endtabs %} +![WinUI ComboBox selection change notification](Selection_images/winui-combobox-selection-change-notification.png) + ## Selection changing notification The `SelectionChanging` event occurs before processing the selection. This is a cancelable event. This argument contains the following information: @@ -353,12 +355,8 @@ comboBox.SelectionChanging += OnComboBoxSelectionChanging; private void OnComboBoxSelectionChanging(object sender, Syncfusion.UI.Xaml.Editors.ComboBoxSelectionChangingEventArgs e) { e.AllowDetachedSelection = true; - - e.Cancel = true; } {% endhighlight %} {% endtabs %} - -![WinUI ComboBox selection change notification](Selection_images/winui-combobox-selection-change-notification.png) From 4b7eaea79d59833e8366307b4b04282d99570988 Mon Sep 17 00:00:00 2001 From: Deepak Raj Sundar Date: Tue, 2 Sep 2025 21:40:03 +0530 Subject: [PATCH 15/15] Added the release notes MD file and corresponding node entry in the TOC.html file --- winui/Release-notes/v31.1.17.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/winui/Release-notes/v31.1.17.md b/winui/Release-notes/v31.1.17.md index 348df6551..53b56fe01 100644 --- a/winui/Release-notes/v31.1.17.md +++ b/winui/Release-notes/v31.1.17.md @@ -1,13 +1,13 @@ --- -title: Essential Studio for WinUI 2025 Volume 3 Main Release Release Notes - v31.1.17 -description: Essential Studio for WinUI 2025 Volume 3 Main Release Release Notes - v31.1.17 +title: Essential Studio® for WinUI Release Notes - v31.1.17 +description: Essential Studio® for WinUI 2025 Volume 3 Main Release Release Notes - v31.1.17 platform: winui documentation: ug --- -# Essential Studio for WinUI Release Notes - v31.1.17 +# Essential Studio® for WinUI Release Notes - v31.1.17 -{% include release-info.html date="September 01, 2025 " version="v31.1.17" passed="109301" failed="0" %} +{% include release-info.html date="September 01, 2025" version="v31.1.17" passed="109301" failed="0" %} {% directory path: _includes/release-notes/v31.1.17 %}