diff --git a/wpf/AI-AssistView/Input-Toolbar.md b/wpf/AI-AssistView/Input-Toolbar.md
index 21250281f..075899adb 100644
--- a/wpf/AI-AssistView/Input-Toolbar.md
+++ b/wpf/AI-AssistView/Input-Toolbar.md
@@ -1,7 +1,7 @@
---
layout: post
title: Input Toolbar in WPF AI AssistView control | Syncfusion
-description: Learn about the input toolbar feature in the AI AssistView control, which enables users to access quick actions to input textbox responses through toolbar items.
+description: The input toolbar in AI AssistView offers quick actions via toolbar items to streamline textbox response entry.
platform: wpf
control: SfAIAssistView
documentation: ug
@@ -38,7 +38,7 @@ Use the ItemTemplate property to define the appearance and behavior of each tool
diff --git a/wpf/AI-AssistView/Open-AI.md b/wpf/AI-AssistView/Open-AI.md
index 4702e700b..d8ec1d4f4 100644
--- a/wpf/AI-AssistView/Open-AI.md
+++ b/wpf/AI-AssistView/Open-AI.md
@@ -1,6 +1,6 @@
---
layout: post
-title: TypingIndicator in WPF AI AssistView control | Syncfusion
+title: OpenAI in WPF AI AssistView control | Syncfusion
description: Learn about how to connect the AI AssistView control with OpenAI and chat gpt conversation experience.
platform: wpf
control: SfAIAssistView
@@ -208,4 +208,168 @@ Set the ViewModel as the DataContext for the AI AssistView or the parent window.
{% endhighlight %}
{% endtabs %}
-
\ No newline at end of file
+
+
+## Customize AI Response Rendering with ViewTemplateSelector in SfAIAssistView
+Use the [ViewTemplateSelector](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Chat.SfAIAssistView.html#Syncfusion_UI_Xaml_Chat_SfAIAssistView_ViewTemplateSelector) property to assign a DataTemplateSelector that controls how messages (including AI responses) are rendered in SfAIAssistView. The selector can return different DataTemplates based on the message type or role (user/assistant/system), enabling rich presentations such as:
+- Markdown (via a Markdown viewer like MdXaml)
+- FlowDocument-based layouts
+- Images and custom visuals
+- HTML (via a WebBrowser control or third-party HTML renderer)
+
+This approach lets you tailor the appearance of assistant messages without modifying your data model.
+
+{% tabs %}
+{% highlight xaml %}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{% endhighlight %}
+{% highlight C# %}
+
+public class ViewTemplateSelector : DataTemplateSelector
+{
+ public DataTemplate AITemplate { get; set; }
+
+ public override DataTemplate SelectTemplate(object item, DependencyObject container)
+ {
+ if (item is AIMessage)
+ {
+ return AITemplate;
+ }
+ return null;
+ }
+}
+
+public class AIMessage : NotificationObject, ITextMessage
+{
+
+ private string solution;
+
+ ///
+ /// Gets or sets the text to be display as the message.
+ ///
+ public string Solution
+ {
+ get
+ {
+ return this.solution;
+ }
+ set
+ {
+ this.solution = value;
+ RaisePropertyChanged(nameof(Solution));
+ }
+ }
+
+ private Author author;
+
+ ///
+ /// Gets or sets the author to be display in the message.
+ ///
+ public Author Author
+ {
+ get { return author; }
+ set
+ {
+ author = value;
+ RaisePropertyChanged(nameof(Author));
+ }
+ }
+
+ private DateTime dateTime;
+
+ ///
+ /// Gets or sets the date and time details when the message was created.
+ ///
+ public DateTime DateTime
+ {
+ get { return dateTime; }
+ set
+ {
+ dateTime = value;
+ RaisePropertyChanged(nameof(DateTime));
+ }
+ }
+
+ private string text;
+
+ ///
+ /// Gets or sets the text to be display as the message.
+ ///
+ public string Text
+ {
+ get { return text; }
+ set { text = value; RaisePropertyChanged(nameof(Text)); }
+ }
+}
+
+{% endhighlight %}
+{% endtabs %}
+
+
\ No newline at end of file
diff --git a/wpf/AI-AssistView/aiassistview_images/wpf_aiassistview_control_structure.png b/wpf/AI-AssistView/aiassistview_images/wpf_aiassistview_control_structure.png
index 1b73620eb..529b67562 100644
Binary files a/wpf/AI-AssistView/aiassistview_images/wpf_aiassistview_control_structure.png and b/wpf/AI-AssistView/aiassistview_images/wpf_aiassistview_control_structure.png differ
diff --git a/wpf/AI-AssistView/aiassistview_images/wpf_aiassistview_customizedresponsetoolbartemplate.png b/wpf/AI-AssistView/aiassistview_images/wpf_aiassistview_customizedresponsetoolbartemplate.png
index 7263b82d8..bd95a1a77 100644
Binary files a/wpf/AI-AssistView/aiassistview_images/wpf_aiassistview_customizedresponsetoolbartemplate.png and b/wpf/AI-AssistView/aiassistview_images/wpf_aiassistview_customizedresponsetoolbartemplate.png differ
diff --git a/wpf/AI-AssistView/aiassistview_images/wpf_aiassistview_gettingstarted.png b/wpf/AI-AssistView/aiassistview_images/wpf_aiassistview_gettingstarted.png
index 001157e98..de13defe9 100644
Binary files a/wpf/AI-AssistView/aiassistview_images/wpf_aiassistview_gettingstarted.png and b/wpf/AI-AssistView/aiassistview_images/wpf_aiassistview_gettingstarted.png differ
diff --git a/wpf/AI-AssistView/aiassistview_images/wpf_aiassistview_input_toolbar_items.png b/wpf/AI-AssistView/aiassistview_images/wpf_aiassistview_input_toolbar_items.png
index 3405f378a..d95021466 100644
Binary files a/wpf/AI-AssistView/aiassistview_images/wpf_aiassistview_input_toolbar_items.png and b/wpf/AI-AssistView/aiassistview_images/wpf_aiassistview_input_toolbar_items.png differ
diff --git a/wpf/AI-AssistView/aiassistview_images/wpf_aiassistview_input_toolbar_left.png b/wpf/AI-AssistView/aiassistview_images/wpf_aiassistview_input_toolbar_left.png
index b042dfb4e..77a0bd1b3 100644
Binary files a/wpf/AI-AssistView/aiassistview_images/wpf_aiassistview_input_toolbar_left.png and b/wpf/AI-AssistView/aiassistview_images/wpf_aiassistview_input_toolbar_left.png differ
diff --git a/wpf/AI-AssistView/aiassistview_images/wpf_aiassistview_input_toolbar_visibility.png b/wpf/AI-AssistView/aiassistview_images/wpf_aiassistview_input_toolbar_visibility.png
index 3405f378a..d95021466 100644
Binary files a/wpf/AI-AssistView/aiassistview_images/wpf_aiassistview_input_toolbar_visibility.png and b/wpf/AI-AssistView/aiassistview_images/wpf_aiassistview_input_toolbar_visibility.png differ
diff --git a/wpf/AI-AssistView/aiassistview_images/wpf_aiassistview_isresponsetoolbarvisible.png b/wpf/AI-AssistView/aiassistview_images/wpf_aiassistview_isresponsetoolbarvisible.png
index e65ac0f64..735327671 100644
Binary files a/wpf/AI-AssistView/aiassistview_images/wpf_aiassistview_isresponsetoolbarvisible.png and b/wpf/AI-AssistView/aiassistview_images/wpf_aiassistview_isresponsetoolbarvisible.png differ
diff --git a/wpf/AI-AssistView/aiassistview_images/wpf_aiassistview_openai.gif b/wpf/AI-AssistView/aiassistview_images/wpf_aiassistview_openai.gif
index a529be2df..2a1ca15ef 100644
Binary files a/wpf/AI-AssistView/aiassistview_images/wpf_aiassistview_openai.gif and b/wpf/AI-AssistView/aiassistview_images/wpf_aiassistview_openai.gif differ
diff --git a/wpf/AI-AssistView/aiassistview_images/wpf_aiassistview_openai1.png b/wpf/AI-AssistView/aiassistview_images/wpf_aiassistview_openai1.png
new file mode 100644
index 000000000..952be87c2
Binary files /dev/null and b/wpf/AI-AssistView/aiassistview_images/wpf_aiassistview_openai1.png differ
diff --git a/wpf/AI-AssistView/aiassistview_images/wpf_aiassistview_responsetoolbar.png b/wpf/AI-AssistView/aiassistview_images/wpf_aiassistview_responsetoolbar.png
index 351bde8fe..f2b5b74ca 100644
Binary files a/wpf/AI-AssistView/aiassistview_images/wpf_aiassistview_responsetoolbar.png and b/wpf/AI-AssistView/aiassistview_images/wpf_aiassistview_responsetoolbar.png differ
diff --git a/wpf/AI-AssistView/aiassistview_images/wpf_aiassistview_stopresponding.gif b/wpf/AI-AssistView/aiassistview_images/wpf_aiassistview_stopresponding.gif
index 4997744b1..a9549da35 100644
Binary files a/wpf/AI-AssistView/aiassistview_images/wpf_aiassistview_stopresponding.gif and b/wpf/AI-AssistView/aiassistview_images/wpf_aiassistview_stopresponding.gif differ
diff --git a/wpf/AI-AssistView/aiassistview_images/wpf_aiassistview_stopresponding_template.gif b/wpf/AI-AssistView/aiassistview_images/wpf_aiassistview_stopresponding_template.gif
index 5ff02938e..743b8762b 100644
Binary files a/wpf/AI-AssistView/aiassistview_images/wpf_aiassistview_stopresponding_template.gif and b/wpf/AI-AssistView/aiassistview_images/wpf_aiassistview_stopresponding_template.gif differ
diff --git a/wpf/AI-AssistView/aiassistview_images/wpf_aiassistview_suggestions.png b/wpf/AI-AssistView/aiassistview_images/wpf_aiassistview_suggestions.png
index 3751146b1..de13defe9 100644
Binary files a/wpf/AI-AssistView/aiassistview_images/wpf_aiassistview_suggestions.png and b/wpf/AI-AssistView/aiassistview_images/wpf_aiassistview_suggestions.png differ
diff --git a/wpf/AI-AssistView/aiassistview_images/wpf_aiassistview_typing_indicator.gif b/wpf/AI-AssistView/aiassistview_images/wpf_aiassistview_typing_indicator.gif
index a529be2df..2a1ca15ef 100644
Binary files a/wpf/AI-AssistView/aiassistview_images/wpf_aiassistview_typing_indicator.gif and b/wpf/AI-AssistView/aiassistview_images/wpf_aiassistview_typing_indicator.gif differ
diff --git a/wpf/AI-AssistView/open-ai.md b/wpf/AI-AssistView/open-ai.md
index 4702e700b..d8ec1d4f4 100644
--- a/wpf/AI-AssistView/open-ai.md
+++ b/wpf/AI-AssistView/open-ai.md
@@ -1,6 +1,6 @@
---
layout: post
-title: TypingIndicator in WPF AI AssistView control | Syncfusion
+title: OpenAI in WPF AI AssistView control | Syncfusion
description: Learn about how to connect the AI AssistView control with OpenAI and chat gpt conversation experience.
platform: wpf
control: SfAIAssistView
@@ -208,4 +208,168 @@ Set the ViewModel as the DataContext for the AI AssistView or the parent window.
{% endhighlight %}
{% endtabs %}
-
\ No newline at end of file
+
+
+## Customize AI Response Rendering with ViewTemplateSelector in SfAIAssistView
+Use the [ViewTemplateSelector](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Chat.SfAIAssistView.html#Syncfusion_UI_Xaml_Chat_SfAIAssistView_ViewTemplateSelector) property to assign a DataTemplateSelector that controls how messages (including AI responses) are rendered in SfAIAssistView. The selector can return different DataTemplates based on the message type or role (user/assistant/system), enabling rich presentations such as:
+- Markdown (via a Markdown viewer like MdXaml)
+- FlowDocument-based layouts
+- Images and custom visuals
+- HTML (via a WebBrowser control or third-party HTML renderer)
+
+This approach lets you tailor the appearance of assistant messages without modifying your data model.
+
+{% tabs %}
+{% highlight xaml %}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{% endhighlight %}
+{% highlight C# %}
+
+public class ViewTemplateSelector : DataTemplateSelector
+{
+ public DataTemplate AITemplate { get; set; }
+
+ public override DataTemplate SelectTemplate(object item, DependencyObject container)
+ {
+ if (item is AIMessage)
+ {
+ return AITemplate;
+ }
+ return null;
+ }
+}
+
+public class AIMessage : NotificationObject, ITextMessage
+{
+
+ private string solution;
+
+ ///
+ /// Gets or sets the text to be display as the message.
+ ///
+ public string Solution
+ {
+ get
+ {
+ return this.solution;
+ }
+ set
+ {
+ this.solution = value;
+ RaisePropertyChanged(nameof(Solution));
+ }
+ }
+
+ private Author author;
+
+ ///
+ /// Gets or sets the author to be display in the message.
+ ///
+ public Author Author
+ {
+ get { return author; }
+ set
+ {
+ author = value;
+ RaisePropertyChanged(nameof(Author));
+ }
+ }
+
+ private DateTime dateTime;
+
+ ///
+ /// Gets or sets the date and time details when the message was created.
+ ///
+ public DateTime DateTime
+ {
+ get { return dateTime; }
+ set
+ {
+ dateTime = value;
+ RaisePropertyChanged(nameof(DateTime));
+ }
+ }
+
+ private string text;
+
+ ///
+ /// Gets or sets the text to be display as the message.
+ ///
+ public string Text
+ {
+ get { return text; }
+ set { text = value; RaisePropertyChanged(nameof(Text)); }
+ }
+}
+
+{% endhighlight %}
+{% endtabs %}
+
+
\ No newline at end of file
diff --git a/wpf/Kanban-Board/SfKanban_images/custom-field-sorting-in-wpf-kanban.gif b/wpf/Kanban-Board/SfKanban_images/custom-field-sorting-in-wpf-kanban.gif
new file mode 100644
index 000000000..076935a54
Binary files /dev/null and b/wpf/Kanban-Board/SfKanban_images/custom-field-sorting-in-wpf-kanban.gif differ
diff --git a/wpf/Kanban-Board/SfKanban_images/index-based-sorting-in-wpf-kanban.gif b/wpf/Kanban-Board/SfKanban_images/index-based-sorting-in-wpf-kanban.gif
new file mode 100644
index 000000000..74efedc7d
Binary files /dev/null and b/wpf/Kanban-Board/SfKanban_images/index-based-sorting-in-wpf-kanban.gif differ
diff --git a/wpf/Kanban-Board/Sorting.md b/wpf/Kanban-Board/Sorting.md
new file mode 100644
index 000000000..0f7efb9fa
--- /dev/null
+++ b/wpf/Kanban-Board/Sorting.md
@@ -0,0 +1,514 @@
+---
+layout: post
+title: Sorting in WPF Kanban Board control | SfKanban | wpf | Syncfusion
+description: Learn here all about Sorting support in Syncfusion® Essential Studio WPF Kanban Board (SfKanban) control and more.
+platform: wpf
+control: SfKanban
+documentation: ug
+---
+
+# Card Item Sorting in WPF Kanban (SfKanban)
+
+The Kanban control supports customizable card sorting within columns based on specific data fields such as `Priority`, `DueDate`, or `Status`. Sorting can be configured programmatically and updated dynamically at runtime using the following properties:
+
+* [SortingMappingPath](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Kanban.SfKanban.html#Syncfusion_UI_Xaml_Kanban_SfKanban_SortingMappingPath) - Used to map the sorting field to a property name in the [KanbanModel](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Kanban.KanbanModel.html) or `CustomModel`. The default value is `string.Empty`, in which case the cards will not be sorted.
+* [SortingOrder](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Kanban.SfKanban.html#Syncfusion_UI_Xaml_Kanban_SfKanban_SortingOrder) - Used to define the direction of cards sorting within each column.
+ * [Ascending](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Kanban.KanbanSortingOrder.html#fields) - Cards with lower values appear first.
+ * [Descending](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Kanban.KanbanSortingOrder.html#fields) - Cards with higher values appear first.
+
+N> The [SortingOrder](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Kanban.SfKanban.html#Syncfusion_UI_Xaml_Kanban_SfKanban_SortingOrder) property is applicable only when a valid value is assigned to [SortingMappingPath](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Kanban.SfKanban.html#Syncfusion_UI_Xaml_Kanban_SfKanban_SortingMappingPath).
+
+## Customize card order with sorting configuration
+
+Sorting in the Kanban control can be implemented using the following approaches.
+
+ * Custom
+ * Index
+
+### Custom Field Sorting
+
+To enable custom sorting behavior, a valid property name from the [ItemsSource](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Kanban.SfKanban.html#Syncfusion_UI_Xaml_Kanban_SfKanban_ItemsSource) must be mapped using the [SortingMappingPath](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Kanban.SfKanban.html#Syncfusion_UI_Xaml_Kanban_SfKanban_SortingMappingPath) property. This mapping ensures that cards are loaded and repositioned based on the corresponding property value, allowing consistent sorting during both initialization and drag-and-drop operations.
+
+This example demonstrates how card positions are updated based on sorting configurations and property mappings.
+
+{% tabs %}
+{% highlight XAML hl_lines="2 3 5" %}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{% endhighlight %}
+{% highlight C# hl_lines="2 6" %}
+
+this.kanban.ItemsSource = new SortingViewModel().Cards;
+this.kanban.CardDragEnd += OnKanbanCardDragEnd;
+
+private void OnKanbanCardDragEnd(object sender, KanbanDragEndEventArgs e)
+{
+ this.kanban.RefreshKanbanColumn(e.TargetKey.ToString());
+}
+
+{% endhighlight %}
+{% highlight c# tabtitle="CardDetails.cs" %}
+
+public class CardDetails
+{
+ public string Title { get; set; }
+ public string Description { get; set; }
+ public string Priority { get; set; }
+ public string Category { get; set; }
+}
+
+{% endhighlight %}
+{% highlight c# tabtitle="SortingViewModel.cs" %}
+
+public class SortingViewModel
+{
+ public SortingViewModel()
+ {
+ this.Cards = new ObservableCollection()
+ {
+ new CardDetails() { Title = "Task - 1", Priority = "Medium", Category = "Open", Description = "Fix the issue reported in the Edge browser." },
+ new CardDetails() { Title = "Task - 3", Priority = "Low", Category = "In Progress", Description = "Analyze the new requirements gathered from the customer." },
+ new CardDetails() { Title = "Task - 4", Priority = "Critical", Category = "Open", Description = "Arrange a web meeting with the customer to get new requirements." },
+ new CardDetails() { Title = "Task - 2", Priority = "High", Category = "In Progress", Description = "Test the application in the Edge browser." },
+ new CardDetails() { Title = "Task - 5", Priority = "Medium", Category = "Done", Description = "Enhance editing functionality." },
+ new CardDetails() { Title = "Task - 8", Priority = "Medium", Category = "In Progress", Description = "Improve application performance." },
+ new CardDetails() { Title = "Task - 9", Priority = "Medium", Category = "Done", Description = "Improve the performance of the editing functionality." },
+ new CardDetails() { Title = "Task - 10", Priority = "High", Category = "Open", Description = "Analyze grid control." },
+ new CardDetails() { Title = "Task - 12", Priority = "Low", Category = "Done", Description = "Analyze stored procedures." }
+ };
+ }
+
+ public ObservableCollection Cards { get; set; }
+}
+
+{% endhighlight %}
+{% endtabs %}
+
+
+
+N>
+ * To apply sorting after a drop operation, handle the [CardDragEnd](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Kanban.SfKanban.html#Syncfusion_UI_Xaml_Kanban_SfKanban_CardDragEnd) event and explicitly call the [RefreshKanbanColumn](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Kanban.SfKanban.html#Syncfusion_UI_Xaml_Kanban_SfKanban_RefreshKanbanColumn_System_String_) method. This ensures the column updates to reflect the new card order based on the defined sorting logic.
+ * When using a custom data model, the default card UI is not applicable. To render the card content, you must define a custom `DataTemplate` using the [CardTemplate](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Kanban.SfKanban.html#Syncfusion_UI_Xaml_Kanban_SfKanban_CardTemplate) property.
+
+### Index-Based Sorting
+
+The index-based approach in the Kanban control allows cards to be dropped at precise positions within a column. Upon dropping, the card's index is updated based on the index of the previous card. Additionally, the index of the next card is incremented relative to the drop position to maintain continuous ordering.
+
+N> The [SortingMappingPath](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Kanban.SfKanban.html#Syncfusion_UI_Xaml_Kanban_SfKanban_SortingMappingPath) property must be mapped to a valid numeric property name from the [ItemsSource](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Kanban.SfKanban.html#Syncfusion_UI_Xaml_Kanban_SfKanban_ItemsSource) to enable index-based sorting updates.
+
+The following code example illustrates how cards numeric property updated using the index-based sorting approach.
+
+{% tabs %}
+{% highlight XAML hl_lines="2 3" %}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{% endhighlight %}
+{% highlight C# hl_lines="5 6 7 11 22 23" %}
+
+private KanbanCardItem selectedCard;
+private KanbanColumn? targetColumn;
+
+// Add the following lines in constructor
+this.kanban.ItemsSource = new SortingViewModel().Cards;
+this.kanban.CardDragStart += OnKanbanCardDragStart;
+this.kanban.CardDragEnd += OnKanbanCardDragEnd;
+
+private void OnKanbanCardDragStart(object sender, KanbanDragStartEventArgs e)
+{
+ this.selectedCard = e.SelectedCard;
+}
+
+private void OnKanbanCardDragEnd(object sender, KanbanDragEndEventArgs e)
+{
+ if (this.kanban == null || this.selectedCard == null || e.TargetColumn == null)
+ {
+ return;
+ }
+
+ this.ApplySortingWithoutPositionChange(e);
+ this.kanban.RefreshKanbanColumn(e.TargetKey.ToString());
+}
+
+private void ApplySortingWithoutPositionChange(KanbanDragEndEventArgs e)
+{
+ var cardItems = e.TargetColumn.Items.Cast().ToList();
+ if (this.kanban == null || this.selectedCard == null || this.selectedCard.Content == null || e.TargetColumn == null || e.TargetKey == null || cardItems == null || !cardItems.Any()
+ || e.SelectedColumn == null || (e.SelectedColumn == e.TargetColumn && e.SelectedColumnIndex == e.TargetCardIndex))
+ {
+ return;
+ }
+
+ // Retrieve sorting configuration
+ var sortMappingPath = this.kanban.SortingMappingPath;
+ var sortingOrder = this.kanban.SortingOrder;
+ CardDetails cardDetails = this.selectedCard.Content as CardDetails;
+
+ // Proceed only if sorting path is defined
+ if (cardDetails == null || string.IsNullOrEmpty(sortMappingPath))
+ {
+ return;
+ }
+
+ // Extract items from the target colum
+ var targetColumnItems = cardItems.Where(card => card != null && card.Content is CardDetails).ToList();
+
+ // Sort items based on the sorting order
+ if (targetColumnItems.Count > 0)
+ {
+ Func keySelector = item => this.GetPropertyInfo(item.GetType(), sortMappingPath);
+ targetColumnItems = sortingOrder == KanbanSortingOrder.Ascending
+ ? targetColumnItems.OrderBy(item => keySelector(item) ?? 0).ToList()
+ : targetColumnItems.OrderByDescending(item => keySelector(item) ?? 0).ToList();
+ }
+
+ // Determine the index to insert the dragged card.
+ int currentCardIndex = e.TargetCardIndex;
+
+ if (e.SelectedColumn != e.TargetColumn)
+ {
+ cardDetails.Category = e.TargetKey.ToString();
+ }
+
+ if (currentCardIndex >= 0 && currentCardIndex <= targetColumnItems.Count)
+ {
+ targetColumnItems.Insert(currentCardIndex, this.selectedCard);
+ }
+ else
+ {
+ targetColumnItems.Add(this.selectedCard);
+ currentCardIndex = targetColumnItems.Count - 1;
+ }
+
+ // Update index property of all items using smart positioning logic
+ this.ApplySmartIndexUpdate(targetColumnItems, currentCardIndex);
+}
+
+private void ApplySmartIndexUpdate(List items, int droppedIndex)
+{
+ if (this.kanban == null || items == null || items.Count == 0)
+ {
+ return;
+ }
+
+ if (this.kanban.SortingOrder == KanbanSortingOrder.Ascending)
+ {
+ this.HandleAscendingIndexSorting(items, droppedIndex);
+ return;
+ }
+
+ this.HandleDescendingIndexSorting(items, droppedIndex);
+}
+
+private void HandleAscendingIndexSorting(List items, int currentCardIndex)
+{
+ int afterCardIndex = -1;
+ int lastItemIndex = -1;
+
+ // Get the index of the card after the insertion point
+ if (currentCardIndex < items.Count - 1)
+ {
+ var afterCard = items[currentCardIndex + 1];
+ afterCardIndex = GetCardIndex(afterCard?.Content) ?? -1;
+ }
+
+ for (int i = 0; i < items.Count; i++)
+ {
+ var item = items[i].Content;
+ if (item == null)
+ {
+ continue;
+ }
+
+ PropertyInfo propertyInfo = this.GetPropertyInfo(item.GetType(), "Index");
+ if (propertyInfo == null)
+ {
+ continue;
+ }
+
+ int itemIndex = Convert.ToInt32(propertyInfo.GetValue(item) ?? 0);
+ bool isFirstItem = i == 0;
+ if (isFirstItem)
+ {
+ // If the inserted card is at the beginning, assign a smart index
+ if (currentCardIndex == 0)
+ {
+ lastItemIndex = afterCardIndex > 1 ? afterCardIndex - 1 : 1;
+ propertyInfo.SetValue(item, lastItemIndex);
+ }
+ else
+ {
+ lastItemIndex = itemIndex;
+ }
+ }
+ else
+ {
+ // Increment index for subsequent items
+ lastItemIndex++;
+ propertyInfo.SetValue(item, lastItemIndex);
+ }
+ }
+}
+
+private void HandleDescendingIndexSorting(List items, int currentCardIndex)
+{
+ int beforeCardIndex = -1;
+ int lastItemIndex = -1;
+
+ // Get the index of the card before the insertion point
+ if (currentCardIndex > 0 && currentCardIndex < items.Count)
+ {
+ var cardBefore = items[currentCardIndex - 1];
+ beforeCardIndex = GetCardIndex(cardBefore?.Content) ?? -1;
+ }
+
+ for (int i = items.Count - 1; i >= 0; i--)
+ {
+ var item = items[i].Content;
+ if (item == null)
+ {
+ continue;
+ }
+
+ PropertyInfo propertyInfo = this.GetPropertyInfo(item.GetType(), "Index");
+ if (propertyInfo == null)
+ {
+ continue;
+ }
+
+ int itemIndex = Convert.ToInt32(propertyInfo.GetValue(item) ?? 0);
+ bool isLastItem = i == items.Count - 1;
+ if (isLastItem)
+ {
+ // If the inserted card is at the end, assign a smart index
+ if (currentCardIndex == items.Count - 1)
+ {
+ lastItemIndex = beforeCardIndex > 1 ? beforeCardIndex - 1 : 1;
+ propertyInfo.SetValue(item, lastItemIndex);
+ }
+ else
+ {
+ lastItemIndex = itemIndex;
+ }
+ }
+ else
+ {
+ lastItemIndex++;
+ propertyInfo.SetValue(item, lastItemIndex);
+ }
+ }
+}
+
+private int? GetCardIndex(object cardDetails)
+{
+ if (cardDetails == null)
+ {
+ return null;
+ }
+
+ PropertyInfo propertyInfo = this.GetPropertyInfo(cardDetails.GetType(), "Index");
+ if (propertyInfo == null)
+ {
+ return null;
+ }
+
+ var indexValue = propertyInfo.GetValue(cardDetails);
+ if (indexValue != null)
+ {
+ return Convert.ToInt32(indexValue);
+ }
+
+ return null;
+}
+
+private PropertyInfo GetPropertyInfo(Type type, string key)
+{
+ return this.GetPropertyInfoCustomType(type, key);
+}
+
+private PropertyInfo GetPropertyInfoCustomType(Type type, string key)
+{
+ return type.GetProperty(key);
+}
+
+{% endhighlight %}
+{% highlight c# tabtitle="CardDetails.cs" %}
+
+public class CardDetails
+{
+ public string Title { get; set; }
+ public string Description { get; set; }
+ public int Index { get; set; }
+ public string Category { get; set; }
+}
+
+{% endhighlight %}
+{% highlight c# tabtitle="SortingViewModel.cs" %}
+
+public class SortingViewModel
+{
+ public SortingViewModel()
+ {
+ this.Cards = new ObservableCollection()
+ {
+ new CardDetails() { Title = "Task - 1", Index = 5, Category = "Open", Description = "Fix the issue reported in the Edge browser." },
+ new CardDetails() { Title = "Task - 3", Index = 9, Category = "In Progress", Description = "Analyze the new requirements gathered from the customer." },
+ new CardDetails() { Title = "Task - 4", Index = 2, Category = "Open", Description = "Arrange a web meeting with the customer to get new requirements." },
+ new CardDetails() { Title = "Task - 2", Index = 1, Category = "In Progress", Description = "Test the application in the Edge browser." },
+ new CardDetails() { Title = "Task - 5", Index = 8, Category = "Done", Description = "Enhance editing functionality." },
+ new CardDetails() { Title = "Task - 8", Index = 3, Category = "In Progress", Description = "Improve application performance." },
+ new CardDetails() { Title = "Task - 9", Index = 6, Category = "Done", Description = "Improve the performance of the editing functionality." },
+ new CardDetails() { Title = "Task - 10", Index = 4, Category = "Open", Description = "Analyze grid control." },
+ new CardDetails() { Title = "Task - 12", Index = 7, Category = "Done", Description = "Analyze stored procedures." }
+ };
+ }
+
+ public ObservableCollection Cards { get; set; }
+}
+
+{% endhighlight %}
+{% endtabs %}
+
+
+
+N>
+ * The Index-based sorting can be achieved at the sample level after a drag-and-drop action. To implement this handle the [CardDragEnd](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Kanban.SfKanban.html#Syncfusion_UI_Xaml_Kanban_SfKanban_CardDragEnd) event, access the items in the target column using `e.TargetColumn.Items`, and update the numeric field used for sorting to maintain a continuous order. Finally, call [RefreshKanbanColumn](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Kanban.SfKanban.html#Syncfusion_UI_Xaml_Kanban_SfKanban_RefreshKanbanColumn_System_String_) method to update the UI with the new order.
+ * To disable sorting logic, avoid assigning a value to the [SortingMappingPath](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Kanban.SfKanban.html#Syncfusion_UI_Xaml_Kanban_SfKanban_SortingMappingPath) property. This ensures that card positions remain static and reflect the order of the [ItemsSource](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.Kanban.SfKanban.html#Syncfusion_UI_Xaml_Kanban_SfKanban_ItemsSource) collection, making it suitable for scenarios where sorting is not required or is managed externally.
\ No newline at end of file
diff --git a/wpf/Release-notes/v31.2.10.md b/wpf/Release-notes/v31.2.10.md
new file mode 100644
index 000000000..1caa8f321
--- /dev/null
+++ b/wpf/Release-notes/v31.2.10.md
@@ -0,0 +1,98 @@
+---
+title: Essential Studio® for WPF Release Notes - v31.2.10
+description: Learn here about the controls in the Essential Studio® for WPF Weekly Nuget Release - Release Notes - v31.2.10
+platform: WPF
+documentation: ug
+---
+
+# Essential Studio® for WPF - v31.2.10 Release Notes
+
+{% include release-info.html date="November 12, 2025" version="v31.2.10" passed="29436" failed="0" %}
+
+{% directory path: _includes/release-notes/v31.2.10 %}
+
+{% include {{file.url}} %}
+
+{% enddirectory %}
+
+## Test Results
+
+| Component Name | Test Cases | Passed | Failed | Remarks |
+|---------------|------------|--------|--------|---------|
+| AutoComplete | 38 | 38 | 0 | All Passed |
+| ButtonAdv | 22 | 22 | 0 | All Passed |
+| CalendarEdit | 22 | 22 | 0 | All Passed |
+| CalenderEdit | 41 | 41 | 0 | All Passed |
+| CardView | 27 | 27 | 0 | All Passed |
+| Carousel | 30 | 30 | 0 | All Passed |
+| CheckListBox | 150 | 150 | 0 | All Passed |
+| ChromelessWindow | 151 | 151 | 0 | All Passed |
+| ColorEdit | 18 | 18 | 0 | All Passed |
+| ColorPicker | 114 | 114 | 0 | All Passed |
+| ColorPickerPalette | 104 | 104 | 0 | All Passed |
+| ComboBoxAdv | 126 | 126 | 0 | All Passed |
+| CurrencyTextBox | 134 | 134 | 0 | All Passed |
+| DateTimeEdit | 169 | 169 | 0 | All Passed |
+| DockingManager | 1084 | 1084 | 0 | All Passed |
+| DocumentContainer | 42 | 42 | 0 | All Passed |
+| DoubleTextBox | 345 | 345 | 0 | All Passed |
+| DropDownButtonAdv | 21 | 21 | 0 | All Passed |
+| EditControl | 198 | 198 | 0 | All Passed |
+| FastLineChart | 191 | 191 | 0 | All Passed |
+| GridDataControl | 519 | 519 | 0 | All Passed |
+| GridTreeControl | 223 | 223 | 0 | All Passed |
+| GroupBar | 66 | 66 | 0 | All Passed |
+| HierarchyNavigator | 8 | 8 | 0 | All Passed |
+| IntegerTextBox | 29 | 29 | 0 | All Passed |
+| MaskedTextBox | 20 | 20 | 0 | All Passed |
+| MenuAdv | 17 | 17 | 0 | All Passed |
+| PercentTextBox | 114 | 114 | 0 | All Passed |
+| PivotGrid | 0 | 0 | 0 | All Passed |
+| PropertyGrid | 147 | 147 | 0 | All Passed |
+| Ribbon | 2267 | 2267 | 0 | All Passed |
+| SfAccordion | 49 | 49 | 0 | All Passed |
+| SfAIAssistView | 2 | 2 | 0 | All Passed |
+| SfAvatarView | 229 | 229 | 0 | All Passed |
+| SfBadge | 8 | 8 | 0 | All Passed |
+| SfBulletGraph | 147 | 147 | 0 | All Passed |
+| SfBusyIndicator | 10 | 10 | 0 | All Passed |
+| SfChart | 1210 | 1210 | 0 | All Passed |
+| SfCirculargauge | 305 | 305 | 0 | All Passed |
+| SfDataGrid | 4731 | 4731 | 0 | All Passed |
+| SfDataPager | 16 | 16 | 0 | All Passed |
+| SfDatePicker | 118 | 118 | 0 | All Passed |
+| SfGridSplitter | 19 | 19 | 0 | All Passed |
+| SfImageEditor | 177 | 177 | 0 | All Passed |
+| SfKanban | 107 | 107 | 0 | All Passed |
+| SfLinearGauge | 27 | 27 | 0 | All Passed |
+| SfMaps | 5031 | 5031 | 0 | All Passed |
+| SfMaskedEdit | 104 | 104 | 0 | All Passed |
+| SfMultiColumnDropDownControl | 187 | 187 | 0 | All Passed |
+| SfNavigationDrawer | 60 | 60 | 0 | All Passed |
+| SfPulsingTile | 12 | 12 | 0 | All Passed |
+| SfRadialMenu | 54 | 54 | 0 | All Passed |
+| SfRadialSlider | 16 | 16 | 0 | All Passed |
+| SfRangeSlider | 11 | 11 | 0 | All Passed |
+| SfScheduler | 4690 | 4690 | 0 | All Passed |
+| SfSchedulerr | 1 | 1 | 0 | All Passed |
+| SfSkinManager | 22 | 22 | 0 | All Passed |
+| SfSpellChecker | 23 | 23 | 0 | All Passed |
+| SfTextBoxExt | 21 | 21 | 0 | All Passed |
+| SfTextInputLayout | 333 | 333 | 0 | All Passed |
+| SfTimePicker | 125 | 125 | 0 | All Passed |
+| SfTreeGrid | 2165 | 2165 | 0 | All Passed |
+| SfTreeMap | 741 | 741 | 0 | All Passed |
+| SfTreeNavigator | 49 | 49 | 0 | All Passed |
+| SfTreeView | 1211 | 1211 | 0 | All Passed |
+| SkinManager | 51 | 51 | 0 | All Passed |
+| SplitButtonAdv | 15 | 15 | 0 | All Passed |
+| TabControlExt | 130 | 130 | 0 | All Passed |
+| TabNavigationControl | 9 | 9 | 0 | All Passed |
+| TabSplitter | 10 | 10 | 0 | All Passed |
+| Taskbar | 9 | 9 | 0 | All Passed |
+| TileViewControl | 128 | 128 | 0 | All Passed |
+| TimeSpanEdit | 21 | 21 | 0 | All Passed |
+| ToolBarAdv | 31 | 31 | 0 | All Passed |
+| TreeViewAdv | 279 | 279 | 0 | All Passed |
+| UpDown | 295 | 295 | 0 | All Passed |
+| WizardControl | 10 | 10 | 0 | All Passed |
\ No newline at end of file
diff --git a/wpf/Release-notes/v31.2.9.md b/wpf/Release-notes/v31.2.9.md
new file mode 100644
index 000000000..1aa5472da
--- /dev/null
+++ b/wpf/Release-notes/v31.2.9.md
@@ -0,0 +1,16 @@
+---
+title: Essential Studio® for WPF Release Notes - v31.2.9
+description: Learn here about the controls in the Essential Studio® for WPF 2025 Volume 3 SP2 Release - Release Notes - v31.2.9
+platform: WPF
+documentation: ug
+---
+
+# Essential Studio® for WPF - v31.2.9 Release Notes
+
+{% include release-info.html date="November 12, 2025" version="v31.2.9" %}
+
+{% directory path: _includes/release-notes/v31.2.9 %}
+
+{% include {{file.url}} %}
+
+{% enddirectory %}
\ No newline at end of file
diff --git a/wpf/Themes/Theme-Studio.md b/wpf/Themes/Theme-Studio.md
index 1970278fb..78c30c0b5 100644
--- a/wpf/Themes/Theme-Studio.md
+++ b/wpf/Themes/Theme-Studio.md
@@ -274,7 +274,7 @@ Provide the theme name, in which the theme should be exported, and select the re

-N> When running the exported project in .NET 8.0 or .NET 9.0 environments, you may encounter reference issues due to missing or incompatible assemblies. To resolve this, manually add references to the required assemblies from the appropriate framework installation path or NuGet packages. Refer path location: C:\Program Files (x86)\Syncfusion\Essential Studio\WPF\ {product version}\precompiledassemblies\ {targetframework}\
+N> When running the exported project in .NET 8.0 or .NET 9.0 environments, you may encounter reference issues due to missing or incompatible assemblies. To resolve this, manually add references to the required assemblies from the appropriate framework installation path or NuGet packages. Refer path location: C:\Program Files (x86)\Syncfusion\Essential Studio\WPF\ {product version}\precompiledassemblies\ {target framework}\
### Generating theme assembly
diff --git a/wpf/dotnet-core-compatibility.md b/wpf/dotnet-core-compatibility.md
index 264d49bb0..f9eb111e8 100644
--- a/wpf/dotnet-core-compatibility.md
+++ b/wpf/dotnet-core-compatibility.md
@@ -24,6 +24,7 @@ Below table represents the supported Syncfusion® Essential Studio
.NET 7.0
.NET 8.0
.NET 9.0
+
.NET 10.0
@@ -32,6 +33,7 @@ Below table represents the supported Syncfusion® Essential Studio
No
No
No
+
No
@@ -41,6 +43,7 @@ From 20.4 (2022 Vol4)
No
No
No
+
No
@@ -50,6 +53,7 @@ From 21.1 (2023 Vol1)
Yes
No
No
+
No
@@ -59,6 +63,7 @@ From 23.2 (2023 Vol3 SP)
Yes
Yes
No
+
No
@@ -68,6 +73,7 @@ From 27.2 (2024 Vol3 SP)
Yes
Yes
Yes
+
No
@@ -77,6 +83,17 @@ From 29.1 (2025 Vol1)
No
Yes
Yes
+
No
+
+
+
+
+From 31.2 (2025 Vol3 SP)
+
No
+
No
+
Yes
+
Yes
+
Yes
@@ -92,7 +109,7 @@ You can add the Syncfusion® assembly references in one of the fol
Refer [control dependencies](https://help.syncfusion.com/wpf/control-dependencies) section to know control and its NuGet to use in the application. After that, add the required NuGet as reference and then you can use the control from ToolBox. The ToolBox will show a list of available controls once you have installed the NuGet package.
-Refer [NuGet package](https://help.syncfusion.com/wpf/visual-studio-integration/nuget-packages) section to find more details about installing the NuGet package in your application.
+Refer [NuGet package](https://help.syncfusion.com/extension/syncfusion-nuget-packages/nuget-packages) section to find more details about installing the NuGet package in your application.
### Adding assembly references from installed location
diff --git a/wpf/samples.md b/wpf/samples.md
index e96cb9bc8..50e279b37 100644
--- a/wpf/samples.md
+++ b/wpf/samples.md
@@ -49,8 +49,7 @@ N> To run the individual control demos, please refer the instruction from [Runni
## Online Samples
-* Download and install `.NetCore` demos from [App Center](https://install.appcenter.ms/orgs/syncfusion-demos/apps/wpf-demos/distribution_groups/release).
-* Download and install `.Net Framework` demos from [Microsoft Store](https://www.microsoft.com/en-us/p/syncfusion-wpf-controls-examples/9n99kdhrff6g?activetab=pivot:overviewtab).
+* Download and install `.Net Framework` demos from [Microsoft Store](https://apps.microsoft.com/detail/9n99kdhrff6g?hl=en-US&gl=US).
## Download demos from online (Clone from github repository)