refactor: 移除 CopilotItemViewModel 中的 Index 属性并更新相关逻辑 (#15328)

This commit is contained in:
yali-hzy
2026-01-09 01:12:23 +08:00
committed by GitHub
parent c9e7eba51b
commit bbdca4ebcb
3 changed files with 12 additions and 39 deletions

View File

@@ -90,12 +90,4 @@ public class CopilotItemViewModel : PropertyChangedBase
Instances.CopilotViewModel.SaveCopilotTask();
}
}
private int _index;
public int Index
{
get => _index;
set => SetAndNotify(ref _index, value);
}
}

View File

@@ -128,7 +128,6 @@ public partial class CopilotViewModel : Screen
var list = JsonConvert.DeserializeObject<List<CopilotItemViewModel>>(copilotTaskList) ?? [];
for (int i = 0; i < list.Count; i++)
{
list[i].Index = i;
CopilotItemViewModels.Add(list[i]);
}
@@ -948,9 +947,9 @@ public partial class CopilotViewModel : Screen
[UsedImplicitly]
public void SelectCopilotTask(object? sender, MouseButtonEventArgs? e = null)
{
if (e?.Source is FrameworkElement element && element.Tag is int index)
if (e?.Source is FrameworkElement element && element.Tag is CopilotItemViewModel item)
{
Filename = CopilotItemViewModels[index].FilePath; // 假设原方法接受int参数
Filename = item.FilePath;
if (e.ChangedButton == MouseButton.Right)
{
UseCopilotList = false;
@@ -960,10 +959,10 @@ public partial class CopilotViewModel : Screen
// UI 绑定的方法
[UsedImplicitly]
public void DeleteCopilotTask(int index)
public void DeleteCopilotTask(CopilotItemViewModel item)
{
CopilotItemViewModels.RemoveAt(index);
CopilotItemIndexChanged();
CopilotItemViewModels.Remove(item);
SaveCopilotTask();
}
// UI 绑定的方法
@@ -974,8 +973,7 @@ public partial class CopilotViewModel : Screen
{
CopilotItemViewModels.Remove(item);
}
CopilotItemIndexChanged();
SaveCopilotTask();
}
// UI 绑定的方法
@@ -1659,20 +1657,20 @@ public partial class CopilotViewModel : Screen
name ??= stageCode;
var item = new CopilotItemViewModel(name, cachePath, false, copilotId) { Index = CopilotItemViewModels.Count, TabIndex = CopilotTabIndex, };
var item = new CopilotItemViewModel(name, cachePath, false, copilotId) { TabIndex = CopilotTabIndex, };
CopilotItemViewModels.Add(item);
}
else
{
if (flags.HasFlag(CopilotModel.DifficultyFlags.Normal))
{
var item = new CopilotItemViewModel(stageCode, cachePath, false, copilotId) { Index = CopilotItemViewModels.Count, TabIndex = CopilotTabIndex, };
var item = new CopilotItemViewModel(stageCode, cachePath, false, copilotId) { TabIndex = CopilotTabIndex, };
CopilotItemViewModels.Add(item);
}
if (flags.HasFlag(CopilotModel.DifficultyFlags.Raid))
{
var item = new CopilotItemViewModel(stageCode, cachePath, true, copilotId) { Index = CopilotItemViewModels.Count, TabIndex = CopilotTabIndex, };
var item = new CopilotItemViewModel(stageCode, cachePath, true, copilotId) { TabIndex = CopilotTabIndex, };
CopilotItemViewModels.Add(item);
}
}
@@ -1715,23 +1713,6 @@ public partial class CopilotViewModel : Screen
});
}
/// <summary>
/// 更新任务顺序
/// UI 绑定的方法
/// </summary>
[UsedImplicitly]
public void CopilotItemIndexChanged()
{
Execute.OnUIThread(() => {
for (int i = 0; i < CopilotItemViewModels.Count; i++)
{
CopilotItemViewModels[i].Index = i;
}
SaveCopilotTask();
});
}
/// <summary>
/// Starts copilot.
/// UI 绑定的方法

View File

@@ -515,7 +515,7 @@
hc:BorderElement.CornerRadius="4,4,0,0"
properties:AutoScroll.AutoScroll="True"
BorderThickness="1,1,1,0"
DragDrop.Drop="{s:Action CopilotItemIndexChanged}"
DragDrop.Drop="{s:Action SaveCopilotTask}"
IsEnabled="{c:Binding StartEnabled}"
ItemsSource="{Binding Path=CopilotItemViewModels}"
Style="{DynamicResource NoSelectedHighlightListBoxStyle}"
@@ -559,7 +559,7 @@
IsEnabled="{Binding ElementName=CopilotList, Path=DataContext.Idle}"
MouseRightButtonUp="{s:Action SelectCopilotTask}"
PreviewMouseLeftButtonUp="{s:Action SelectCopilotTask}"
Tag="{c:Binding Index}" />
Tag="{Binding}" />
<Button
Grid.Column="2"
Margin="0"
@@ -570,7 +570,7 @@
Background="Transparent"
BorderThickness="0"
Command="{s:Action DeleteCopilotTask}"
CommandParameter="{c:Binding Index}"
CommandParameter="{Binding}"
IsEnabled="{Binding ElementName=CopilotList, Path=DataContext.Idle}" />
</Grid>
</DataTemplate>