From 7a96fba6d830befc18b78c79a4055ef0593e2f05 Mon Sep 17 00:00:00 2001 From: Rene Evertz Date: Wed, 9 Jul 2025 15:30:54 +0200 Subject: [PATCH] Klonen funktioniert - MVVM komform --- BeWo/Styles/Features/AIChatStyles.xaml | 2 +- .../Detail/AI/AiConversationChatView.xaml | 3 +- BeWo/ViewModel/AiConversationMessageVM.cs | 9 +++ .../AiConversationMessageListVM.cs | 68 +++++++++++++------ .../View/AiConversationChatViewModel.cs | 2 +- 5 files changed, 61 insertions(+), 23 deletions(-) diff --git a/BeWo/Styles/Features/AIChatStyles.xaml b/BeWo/Styles/Features/AIChatStyles.xaml index 974756b48..25e78408d 100644 --- a/BeWo/Styles/Features/AIChatStyles.xaml +++ b/BeWo/Styles/Features/AIChatStyles.xaml @@ -265,7 +265,7 @@ + IsChecked="{Binding IsChecked, Mode=TwoWay}" /> diff --git a/BeWo/View/Detail/AI/AiConversationChatView.xaml b/BeWo/View/Detail/AI/AiConversationChatView.xaml index fff4cdfa2..662b07f0c 100644 --- a/BeWo/View/Detail/AI/AiConversationChatView.xaml +++ b/BeWo/View/Detail/AI/AiConversationChatView.xaml @@ -14,6 +14,7 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:shared="clr-namespace:BS.Shared;assembly=BS.Shared" xmlns:t="clr-namespace:BeWo.MultiLanguage.Markup" + xmlns:templateselectors="clr-namespace:BeWo.View.TemplateSelectors" xmlns:uc="clr-namespace:BeWo.Controls;assembly=BeWo.Controls" xmlns:viewmodel="clr-namespace:BeWo.ViewModel" xmlns:vmv="clr-namespace:BeWo.ViewModel.View" @@ -54,9 +55,9 @@ FontSize="14" FontWeight="SemiBold" Foreground="{DynamicResource TextForegroundPrimary}" + MouseDown="ConversationRenameTextBlock_MouseDown" Text="{Binding Displayname}" TextTrimming="CharacterEllipsis" - MouseDown="ConversationRenameTextBlock_MouseDown" Visibility="{Binding IsEditing, Converter={StaticResource BoolVisibilityConverter}, ConverterParameter=false}" /> pDCs) : base(pDCs) { - VMList.ListChanged += (s, e) => - { - if (e.ListChangedType == ListChangedType.ItemChanged) - { - var changedItem = VMList[e.NewIndex]; - Item_PropertyChanged(changedItem, new PropertyChangedEventArgs(nameof(AiConversationMessageVM.IsChecked))); - } - }; + foreach(var vm in VMList) + { + vm.IsCheckedChanged += CloneIsCheckedChanged; + } + + //VMList.ListChanged += (s, e) => + // { + // if (e.ListChangedType == ListChangedType.ItemChanged) + // { + // var changedItem = VMList[e.NewIndex]; + // Item_PropertyChanged(changedItem, new PropertyChangedEventArgs(nameof(AiConversationMessageVM.IsChecked))); + // } + // }; } public AiConversationMessageListVM() : this(null) { } - private void Item_PropertyChanged(object sender, PropertyChangedEventArgs e) + private void CloneIsCheckedChanged(object sender, EventArgs e) { - if (e.PropertyName == nameof(AiConversationMessageVM.IsChecked) - && sender is AiConversationMessageVM vm - && vm.Role == BS.Shared.AiConversationMessageRole.Assistent) + if(sender is AiConversationMessageVM vm) { - var changedItem = (AiConversationMessageVM)sender; - int index = VMList.IndexOf(changedItem); + int index = VMList.IndexOf(vm); - if (changedItem.IsChecked) + if (vm.IsChecked) { - for (int i = 0; i <= index; i++) - if (!VMList[i].IsChecked) - VMList[i].IsChecked = true; + for (int i = 0; i < index; i++) + { + VMList[i].SetIsChecked(true); + } } else { for (int i = index - 1; i < VMList.Count; i++) - if (VMList[i].IsChecked) - VMList[i].IsChecked = false; + { + VMList[i].SetIsChecked(false); + } } } } + + //private void Item_PropertyChanged(object sender, PropertyChangedEventArgs e) + //{ + // if (e.PropertyName == nameof(AiConversationMessageVM.IsChecked) + // && sender is AiConversationMessageVM vm + // && vm.Role == BS.Shared.AiConversationMessageRole.Assistent) + // { + // var changedItem = (AiConversationMessageVM)sender; + // int index = VMList.IndexOf(changedItem); + + // if (changedItem.IsChecked) + // { + // for (int i = 0; i <= index; i++) + // if (!VMList[i].IsChecked) + // VMList[i].IsChecked = true; + // } + // else + // { + // for (int i = index - 1; i < VMList.Count; i++) + // if (VMList[i].IsChecked) + // VMList[i].IsChecked = false; + // } + // } + //} } } diff --git a/BeWo/ViewModel/View/AiConversationChatViewModel.cs b/BeWo/ViewModel/View/AiConversationChatViewModel.cs index 6c5814632..021d4fe65 100644 --- a/BeWo/ViewModel/View/AiConversationChatViewModel.cs +++ b/BeWo/ViewModel/View/AiConversationChatViewModel.cs @@ -346,7 +346,7 @@ namespace BeWo.ViewModel.View { foreach (var message in ListVM.SelectedVM.Messages.VMList) { - message.IsChecked = true; + message.SetIsChecked(true); } IsCloneOpen = true;