添加搜索功能
This commit is contained in:
@@ -1,4 +1,7 @@
|
|||||||
using System.Collections.ObjectModel;
|
using System.Collections.ObjectModel;
|
||||||
|
using System.ComponentModel;
|
||||||
|
using System.Windows.Data;
|
||||||
|
using System.Windows.Input;
|
||||||
using CommunityToolkit.Mvvm.ComponentModel;
|
using CommunityToolkit.Mvvm.ComponentModel;
|
||||||
using CommunityToolkit.Mvvm.Input;
|
using CommunityToolkit.Mvvm.Input;
|
||||||
using iNKORE.UI.WPF.Modern.Controls;
|
using iNKORE.UI.WPF.Modern.Controls;
|
||||||
@@ -16,18 +19,18 @@ partial class VariableTableViewModel : ViewModelBase
|
|||||||
{
|
{
|
||||||
private readonly IDialogService _dialogService;
|
private readonly IDialogService _dialogService;
|
||||||
|
|
||||||
// private readonly ILogger<VariableTableViewModel> _logger;
|
|
||||||
[ObservableProperty]
|
[ObservableProperty]
|
||||||
private VariableTable variableTable;
|
private VariableTable variableTable;
|
||||||
|
private ObservableCollection<VariableData> _dataVariables = new ObservableCollection<VariableData>();
|
||||||
[ObservableProperty]
|
|
||||||
private ObservableCollection<VariableData> _dataVariables;
|
|
||||||
|
|
||||||
private ObservableCollection<VariableData> _originalDataVariables;
|
|
||||||
|
|
||||||
[ObservableProperty]
|
[ObservableProperty]
|
||||||
private VariableData _selectedVariableData;
|
private VariableData _selectedVariableData;
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
private string _searchText;
|
||||||
|
|
||||||
|
public ICollectionView VariableDataView { get; private set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 是否是第一次加载,防止ToggleSwitch第一次加载触发改变事件
|
/// 是否是第一次加载,防止ToggleSwitch第一次加载触发改变事件
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -35,30 +38,62 @@ partial class VariableTableViewModel : ViewModelBase
|
|||||||
|
|
||||||
private readonly VarTableRepository _varTableRepository;
|
private readonly VarTableRepository _varTableRepository;
|
||||||
private readonly VarDataRepository _varDataRepository;
|
private readonly VarDataRepository _varDataRepository;
|
||||||
|
private ObservableCollection<VariableData>? _originalDataVariables;
|
||||||
|
|
||||||
|
|
||||||
public VariableTableViewModel(IDialogService dialogService)
|
public VariableTableViewModel(IDialogService dialogService)
|
||||||
{
|
{
|
||||||
_dialogService = dialogService;
|
_dialogService = dialogService;
|
||||||
IsLoadCompletion = false;
|
IsLoadCompletion = false;
|
||||||
// _logger = logger;
|
|
||||||
_varTableRepository = new VarTableRepository();
|
_varTableRepository = new VarTableRepository();
|
||||||
_varDataRepository = new VarDataRepository();
|
_varDataRepository = new VarDataRepository();
|
||||||
|
_dataVariables = new ObservableCollection<VariableData>(); // Initialize here
|
||||||
|
VariableDataView = CollectionViewSource.GetDefaultView(_dataVariables);
|
||||||
|
VariableDataView.Filter = FilterVariables;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private bool FilterVariables(object item)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrWhiteSpace(SearchText))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (item is VariableData variable)
|
||||||
|
{
|
||||||
|
var searchTextLower = SearchText.ToLower();
|
||||||
|
return variable.Name?.ToLower().Contains(searchTextLower) == true ||
|
||||||
|
variable.Description?.ToLower().Contains(searchTextLower) == true ||
|
||||||
|
variable.NodeId?.ToLower().Contains(searchTextLower) == true ||
|
||||||
|
variable.S7Address?.ToLower().Contains(searchTextLower) == true ||
|
||||||
|
variable.DataValue?.ToLower().Contains(searchTextLower) == true ||
|
||||||
|
variable.DisplayValue?.ToLower().Contains(searchTextLower) == true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
partial void OnSearchTextChanged(string value)
|
||||||
|
{
|
||||||
|
VariableDataView?.Refresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public override void OnLoaded()
|
public override void OnLoaded()
|
||||||
{
|
{
|
||||||
if (VariableTable.DataVariables != null)
|
if (VariableTable.DataVariables != null)
|
||||||
{
|
{
|
||||||
DataVariables = new ObservableCollection<VariableData>(VariableTable.DataVariables);
|
_dataVariables = new ObservableCollection<VariableData>(VariableTable.DataVariables);
|
||||||
|
VariableDataView = CollectionViewSource.GetDefaultView(_dataVariables);
|
||||||
|
VariableDataView.Filter = FilterVariables;
|
||||||
|
|
||||||
// 3. 创建原始数据的深拷贝备份
|
// 3. 创建原始数据的深拷贝备份
|
||||||
// 推荐使用 JSON 序列化/反序列化进行深度拷贝
|
// 推荐使用 JSON 序列化/反序列化进行深度拷贝
|
||||||
var serialized = JsonConvert.SerializeObject(DataVariables);
|
var serialized = JsonConvert.SerializeObject(_dataVariables);
|
||||||
_originalDataVariables = JsonConvert.DeserializeObject<ObservableCollection<VariableData>>(serialized);
|
_originalDataVariables = JsonConvert.DeserializeObject<ObservableCollection<VariableData>>(serialized);
|
||||||
|
|
||||||
// 在数据加载完成后,将所有变量的 IsModified 状态重置为 false
|
// 在数据加载完成后,将所有变量的 IsModified 状态重置为 false
|
||||||
foreach (var variableData in DataVariables)
|
foreach (var variableData in _dataVariables)
|
||||||
{
|
{
|
||||||
variableData.IsModified = false;
|
variableData.IsModified = false;
|
||||||
}
|
}
|
||||||
@@ -74,7 +109,7 @@ partial class VariableTableViewModel : ViewModelBase
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public override async Task<bool> OnExitAsync()
|
public override async Task<bool> OnExitAsync()
|
||||||
{
|
{
|
||||||
var modifiedDatas = DataVariables.Where(d => d.IsModified == true)
|
var modifiedDatas = _dataVariables.Where(d => d.IsModified == true)
|
||||||
.ToList();
|
.ToList();
|
||||||
if (modifiedDatas.Count == 0)
|
if (modifiedDatas.Count == 0)
|
||||||
return true;
|
return true;
|
||||||
@@ -102,7 +137,7 @@ partial class VariableTableViewModel : ViewModelBase
|
|||||||
[RelayCommand]
|
[RelayCommand]
|
||||||
private async void SaveModifiedVarData()
|
private async void SaveModifiedVarData()
|
||||||
{
|
{
|
||||||
var modifiedDatas = DataVariables.Where(d => d.IsModified == true)
|
var modifiedDatas = _dataVariables.Where(d => d.IsModified == true)
|
||||||
.ToList();
|
.ToList();
|
||||||
///更新数据库
|
///更新数据库
|
||||||
await _varDataRepository.UpdateAsync(modifiedDatas);
|
await _varDataRepository.UpdateAsync(modifiedDatas);
|
||||||
@@ -167,7 +202,7 @@ partial class VariableTableViewModel : ViewModelBase
|
|||||||
//更新界面
|
//更新界面
|
||||||
// variableTable.DataVariables.AddRange(resVarDataList);
|
// variableTable.DataVariables.AddRange(resVarDataList);
|
||||||
variableTable.DataVariables= await _varDataRepository.GetAllAsync();
|
variableTable.DataVariables= await _varDataRepository.GetAllAsync();
|
||||||
DataVariables=new ObservableCollection<VariableData>(variableTable.DataVariables);
|
_dataVariables=new ObservableCollection<VariableData>(variableTable.DataVariables);
|
||||||
processingDialog?.Hide();
|
processingDialog?.Hide();
|
||||||
|
|
||||||
string msgSuccess = $"成功导入变量:{resVarDataCount}个。";
|
string msgSuccess = $"成功导入变量:{resVarDataCount}个。";
|
||||||
@@ -199,7 +234,7 @@ partial class VariableTableViewModel : ViewModelBase
|
|||||||
// 更新数据库
|
// 更新数据库
|
||||||
await _varDataRepository.AddAsync(varData);
|
await _varDataRepository.AddAsync(varData);
|
||||||
// 更新当前页面的
|
// 更新当前页面的
|
||||||
DataVariables.Add(varData);
|
_dataVariables.Add(varData);
|
||||||
NotificationHelper.ShowSuccess($"添加变量成功:{varData?.Name}");
|
NotificationHelper.ShowSuccess($"添加变量成功:{varData?.Name}");
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
@@ -233,7 +268,7 @@ partial class VariableTableViewModel : ViewModelBase
|
|||||||
{
|
{
|
||||||
foreach (var variable in variablesToDelete)
|
foreach (var variable in variablesToDelete)
|
||||||
{
|
{
|
||||||
DataVariables.Remove(variable);
|
_dataVariables.Remove(variable);
|
||||||
}
|
}
|
||||||
NotificationHelper.ShowSuccess($"成功删除 {result} 个变量");
|
NotificationHelper.ShowSuccess($"成功删除 {result} 个变量");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -87,8 +87,7 @@
|
|||||||
</ui:AppBarButton.Icon>
|
</ui:AppBarButton.Icon>
|
||||||
|
|
||||||
</ui:AppBarButton>
|
</ui:AppBarButton>
|
||||||
<ui:AppBarButton
|
<ui:AppBarButton Command="{Binding ImprotFromTiaVarTableCommand}"
|
||||||
Command="{Binding ImprotFromTiaVarTableCommand}"
|
|
||||||
Label="从TIA变量表导入">
|
Label="从TIA变量表导入">
|
||||||
<ui:AppBarButton.Icon>
|
<ui:AppBarButton.Icon>
|
||||||
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Import}" />
|
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Import}" />
|
||||||
@@ -97,7 +96,6 @@
|
|||||||
</ui:AppBarButton>
|
</ui:AppBarButton>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<ui:AppBarButton x:Name="ShareButton"
|
<ui:AppBarButton x:Name="ShareButton"
|
||||||
Label="Share">
|
Label="Share">
|
||||||
<ui:AppBarButton.Icon>
|
<ui:AppBarButton.Icon>
|
||||||
@@ -136,8 +134,13 @@
|
|||||||
Text="协议:" />
|
Text="协议:" />
|
||||||
<TextBlock Style="{StaticResource VarTableValueStyle}"
|
<TextBlock Style="{StaticResource VarTableValueStyle}"
|
||||||
Text="{Binding VariableTable.ProtocolType}" />
|
Text="{Binding VariableTable.ProtocolType}" />
|
||||||
|
<TextBlock Style="{StaticResource VarTableLabelStyle}"
|
||||||
|
Text="搜索:" />
|
||||||
|
<TextBox Width="200"
|
||||||
|
HorizontalAlignment="Left"
|
||||||
|
Margin="5,0,0,0"
|
||||||
|
Text="{Binding SearchText, UpdateSourceTrigger=PropertyChanged}"
|
||||||
|
ui:ControlHelper.PlaceholderText="搜索变量..." />
|
||||||
</ikw:SimpleStackPanel>
|
</ikw:SimpleStackPanel>
|
||||||
|
|
||||||
|
|
||||||
@@ -150,7 +153,7 @@
|
|||||||
CanUserSortColumns="True"
|
CanUserSortColumns="True"
|
||||||
SelectionMode="Extended"
|
SelectionMode="Extended"
|
||||||
SelectedItem="{Binding SelectedVariableData}"
|
SelectedItem="{Binding SelectedVariableData}"
|
||||||
ItemsSource="{Binding DataVariables}">
|
ItemsSource="{Binding VariableDataView}">
|
||||||
<DataGrid.ContextMenu>
|
<DataGrid.ContextMenu>
|
||||||
<ContextMenu>
|
<ContextMenu>
|
||||||
<MenuItem Header="添加变量"
|
<MenuItem Header="添加变量"
|
||||||
@@ -245,7 +248,8 @@
|
|||||||
<DataGridTextColumn IsReadOnly="True"
|
<DataGridTextColumn IsReadOnly="True"
|
||||||
Header="数据类型"
|
Header="数据类型"
|
||||||
Binding="{Binding DataType}" />
|
Binding="{Binding DataType}" />
|
||||||
<DataGridTemplateColumn Header="信号类型" SortMemberPath="SignalType">
|
<DataGridTemplateColumn Header="信号类型"
|
||||||
|
SortMemberPath="SignalType">
|
||||||
<DataGridTemplateColumn.CellTemplate>
|
<DataGridTemplateColumn.CellTemplate>
|
||||||
<DataTemplate>
|
<DataTemplate>
|
||||||
<TextBlock Text="{Binding SignalType, Converter={StaticResource EnumDescriptionConverter}}" />
|
<TextBlock Text="{Binding SignalType, Converter={StaticResource EnumDescriptionConverter}}" />
|
||||||
@@ -264,10 +268,12 @@
|
|||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
</DataGridTemplateColumn.CellEditingTemplate>
|
</DataGridTemplateColumn.CellEditingTemplate>
|
||||||
</DataGridTemplateColumn>
|
</DataGridTemplateColumn>
|
||||||
<DataGridTemplateColumn Header="轮询频率" SortMemberPath="PollLevelType">
|
<DataGridTemplateColumn Header="轮询频率"
|
||||||
|
SortMemberPath="PollLevelType">
|
||||||
<DataGridTemplateColumn.CellTemplate>
|
<DataGridTemplateColumn.CellTemplate>
|
||||||
<DataTemplate>
|
<DataTemplate>
|
||||||
<TextBlock Text="{Binding PollLevelType, Converter={StaticResource EnumDescriptionConverter}}" />
|
<TextBlock
|
||||||
|
Text="{Binding PollLevelType, Converter={StaticResource EnumDescriptionConverter}}" />
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
</DataGridTemplateColumn.CellTemplate>
|
</DataGridTemplateColumn.CellTemplate>
|
||||||
<DataGridTemplateColumn.CellEditingTemplate>
|
<DataGridTemplateColumn.CellEditingTemplate>
|
||||||
|
|||||||
Reference in New Issue
Block a user