@@ -35,6 +35,9 @@ | |||||
<Compile Update="View\ManualFlowView.xaml.cs"> | <Compile Update="View\ManualFlowView.xaml.cs"> | ||||
<SubType>Code</SubType> | <SubType>Code</SubType> | ||||
</Compile> | </Compile> | ||||
<Compile Update="View\SelectRecipesView.xaml.cs"> | |||||
<SubType>Code</SubType> | |||||
</Compile> | |||||
<Compile Update="View\StockBinRawMaterialView.xaml.cs"> | <Compile Update="View\StockBinRawMaterialView.xaml.cs"> | ||||
<SubType>Code</SubType> | <SubType>Code</SubType> | ||||
</Compile> | </Compile> | ||||
@@ -1340,9 +1340,44 @@ namespace BPASmartClient.JXJFoodSmallStation.Model | |||||
//将本地配方发送到西门子配方里,执行配料 | //将本地配方发送到西门子配方里,执行配料 | ||||
ActionManage.GetInstance.Register(new Action<Object>((res) => | ActionManage.GetInstance.Register(new Action<Object>((res) => | ||||
{ | { | ||||
if (res != null && res is RemoteRecipeData recipe) | |||||
if (res != null && res is RemoteRecipeData rm) | |||||
{ | { | ||||
Json<RemoteRecipeDataColl>.Data.Recipes.Add(recipe); | |||||
//Json<RemoteRecipeDataColl>.Data.Recipes.Add(rm); | |||||
var newRecipe=new RemoteRecipeData(); | |||||
newRecipe.RecipeName = rm.RecipeName; | |||||
newRecipe.RecipeCode = rm.RecipeCode; | |||||
newRecipe.TrayCode = rm.TrayCode; | |||||
foreach (var item in rm.RawMaterial) | |||||
{ | |||||
newRecipe.RawMaterial.Add(new RemoteRecipeRawMaterial() | |||||
{ | |||||
DeviceIp = item.DeviceIp, | |||||
RawMaterialName = item.RawMaterialName, | |||||
RawMaterialBarrelNum = item.RawMaterialBarrelNum, | |||||
RawMaterialType = item.RawMaterialType, | |||||
RawMaterialWeight = item.RawMaterialWeight, | |||||
Laying_Off_Weight = item.Laying_Off_Weight, | |||||
StockBinRemainingWeight = item.StockBinRemainingWeight, | |||||
RawMaterialLocation = item.RawMaterialLocation, | |||||
IsDosingComple = item.IsDosingComple | |||||
}); | |||||
} | |||||
foreach (var item in rm.WindSend) | |||||
{ | |||||
newRecipe.WindSend.Add(new WindSendRawMaterial() | |||||
{ | |||||
DeviceIp = item.DeviceIp, | |||||
Location=item.Location, | |||||
RawMaterialChineseName = item.RawMaterialChineseName, | |||||
RawMaterialName = item.RawMaterialName, | |||||
RawMaterialWeight = item.RawMaterialWeight, | |||||
DosingCompleWeight = item.DosingCompleWeight, | |||||
RawMaterialBarrelNum = item.RawMaterialBarrelNum, | |||||
RawMaterialType = item.RawMaterialType, | |||||
}); | |||||
} | |||||
Json<RemoteRecipeDataColl>.Data.Recipes.Add(newRecipe); | |||||
} | } | ||||
}), "LocalSimulationRecipeIssue", true); | }), "LocalSimulationRecipeIssue", true); | ||||
@@ -10,5 +10,9 @@ namespace BPASmartClient.JXJFoodSmallStation.Model.Siemens | |||||
internal class LocalRecipeDataColl | internal class LocalRecipeDataColl | ||||
{ | { | ||||
public ObservableCollection<RemoteRecipeData> Recipes { get; set; } = new ObservableCollection<RemoteRecipeData>(); | public ObservableCollection<RemoteRecipeData> Recipes { get; set; } = new ObservableCollection<RemoteRecipeData>(); | ||||
/// <summary> | |||||
/// 筛选后的配方显示集合。 | |||||
/// </summary> | |||||
public ObservableCollection<RemoteRecipeData> SelectedRecipes { get; set; } = new ObservableCollection<RemoteRecipeData>(); | |||||
} | } | ||||
} | } |
@@ -46,6 +46,7 @@ | |||||
<Grid> | <Grid> | ||||
<Grid.RowDefinitions> | <Grid.RowDefinitions> | ||||
<RowDefinition Height="50" /> | <RowDefinition Height="50" /> | ||||
<RowDefinition Height="40" /> | |||||
<RowDefinition /> | <RowDefinition /> | ||||
</Grid.RowDefinitions> | </Grid.RowDefinitions> | ||||
<StackPanel HorizontalAlignment="Right" Orientation="Horizontal"> | <StackPanel HorizontalAlignment="Right" Orientation="Horizontal"> | ||||
@@ -111,13 +112,14 @@ | |||||
IsEnabled="True" | IsEnabled="True" | ||||
Style="{StaticResource IcoButtonStyle}" /> | Style="{StaticResource IcoButtonStyle}" /> | ||||
</StackPanel> | </StackPanel> | ||||
<ScrollViewer Grid.Row="1"> | |||||
<Button Content="筛选配方" Style="{StaticResource ButtonStyle}" Command="{Binding SelectRecipesCommand}" Grid.Row="1"/> | |||||
<ScrollViewer Grid.Row="2"> | |||||
<ListView | <ListView | ||||
Margin="5" | Margin="5" | ||||
VerticalAlignment="Top" | VerticalAlignment="Top" | ||||
Background="Transparent" | Background="Transparent" | ||||
BorderThickness="0" | BorderThickness="0" | ||||
ItemsSource="{Binding Recipes}" | |||||
ItemsSource="{Binding SelectedRecipes}" | |||||
ScrollViewer.HorizontalScrollBarVisibility="Disabled"> | ScrollViewer.HorizontalScrollBarVisibility="Disabled"> | ||||
<ListView.ItemsPanel> | <ListView.ItemsPanel> | ||||
<ItemsPanelTemplate> | <ItemsPanelTemplate> | ||||
@@ -0,0 +1,221 @@ | |||||
<Window | |||||
x:Class="BPASmartClient.JXJFoodSmallStation.View.SelectRecipesView" | |||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" | |||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" | |||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" | |||||
xmlns:local="clr-namespace:BPASmartClient.JXJFoodSmallStation.View" | |||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" | |||||
xmlns:vm="clr-namespace:BPASmartClient.JXJFoodSmallStation.ViewModel" | |||||
Title="SelectRecipesView" | |||||
Width="1000" | |||||
Height="620" | |||||
AllowsTransparency="True" | |||||
Background="{x:Null}" | |||||
Topmost="True" | |||||
WindowStartupLocation="CenterScreen" | |||||
WindowStyle="None" | |||||
mc:Ignorable="d"> | |||||
<Window.DataContext> | |||||
<vm:SelectRecipesViewModel /> | |||||
</Window.DataContext> | |||||
<Window.Resources> | |||||
<ResourceDictionary> | |||||
<ResourceDictionary.MergedDictionaries> | |||||
<ResourceDictionary Source="/BPASmartClient.CustomResource;component/Themes/GenricStyle.xaml" /> | |||||
<ResourceDictionary Source="/BPASmartClient.CustomResource;component/Themes/MyStyle.xaml" /> | |||||
</ResourceDictionary.MergedDictionaries> | |||||
<!--修改了勾选的大小--> | |||||
<Style x:Key="CheckBoxLarge" TargetType="{x:Type CheckBox}"> | |||||
<Setter Property="Foreground" Value="{DynamicResource foreground}" /> | |||||
<Setter Property="VerticalContentAlignment" Value="Center" /> | |||||
<Setter Property="FocusVisualStyle"> | |||||
<Setter.Value> | |||||
<Style> | |||||
<Setter Property="Control.Template"> | |||||
<Setter.Value> | |||||
<ControlTemplate> | |||||
<Rectangle | |||||
Margin="1" | |||||
SnapsToDevicePixels="True" | |||||
Stroke="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" | |||||
StrokeDashArray="1 2" | |||||
StrokeThickness="1" /> | |||||
</ControlTemplate> | |||||
</Setter.Value> | |||||
</Setter> | |||||
</Style> | |||||
</Setter.Value> | |||||
</Setter> | |||||
<Setter Property="Template"> | |||||
<Setter.Value> | |||||
<ControlTemplate TargetType="{x:Type CheckBox}"> | |||||
<StackPanel | |||||
Background="Transparent" | |||||
Orientation="Horizontal" | |||||
SnapsToDevicePixels="True"> | |||||
<Grid> | |||||
<Image | |||||
Width="24" | |||||
Height="28" | |||||
Source="/BPASmartClient.CustomResource;component/Image/Cb_HalfChecked.png" /> | |||||
<Image | |||||
x:Name="image1" | |||||
Width="24" | |||||
Height="28" | |||||
Source="/BPASmartClient.CustomResource;component/Image/Cb_HalfChecked.png" /> | |||||
</Grid> | |||||
<ContentPresenter | |||||
Margin="{TemplateBinding Padding}" | |||||
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" | |||||
VerticalAlignment="{TemplateBinding VerticalContentAlignment}" | |||||
Content="{TemplateBinding Content}" | |||||
ContentStringFormat="{TemplateBinding ContentStringFormat}" | |||||
RecognizesAccessKey="True" | |||||
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" /> | |||||
</StackPanel> | |||||
<ControlTemplate.Triggers> | |||||
<Trigger Property="HasContent" Value="True"> | |||||
<Setter Property="FocusVisualStyle"> | |||||
<Setter.Value> | |||||
<Style> | |||||
<Setter Property="Control.Template"> | |||||
<Setter.Value> | |||||
<ControlTemplate> | |||||
<Rectangle | |||||
Margin="14,0,0,0" | |||||
SnapsToDevicePixels="True" | |||||
Stroke="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" | |||||
StrokeDashArray="1 2" | |||||
StrokeThickness="1" /> | |||||
</ControlTemplate> | |||||
</Setter.Value> | |||||
</Setter> | |||||
</Style> | |||||
</Setter.Value> | |||||
</Setter> | |||||
<Setter Property="Padding" Value="4,0,0,0" /> | |||||
</Trigger> | |||||
<Trigger Property="IsEnabled" Value="False"> | |||||
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}" /> | |||||
</Trigger> | |||||
<Trigger Property="IsChecked" Value="true"> | |||||
<Setter TargetName="image1" Property="Source" Value="/BPASmartClient.CustomResource;component/Image/Cb_Checked.png" /> | |||||
</Trigger> | |||||
<Trigger Property="IsChecked" Value="{x:Null}"> | |||||
<Setter TargetName="image1" Property="Source" Value="/BPASmartClient.CustomResource;component/Image/Cb_HalfChecked.png" /> | |||||
</Trigger> | |||||
</ControlTemplate.Triggers> | |||||
</ControlTemplate> | |||||
</Setter.Value> | |||||
</Setter> | |||||
</Style> | |||||
</ResourceDictionary> | |||||
</Window.Resources> | |||||
<Border | |||||
Name="br" | |||||
BorderBrush="#0CADF5" | |||||
BorderThickness="2"> | |||||
<Border.Background> | |||||
<ImageBrush ImageSource="/BPASmartClient.CustomResource;component/Image/bg.png" /> | |||||
</Border.Background> | |||||
<Grid> | |||||
<Grid.RowDefinitions> | |||||
<RowDefinition Height="40" /> | |||||
<RowDefinition Height="40" /> | |||||
<RowDefinition Height="1*" /> | |||||
</Grid.RowDefinitions> | |||||
<TextBlock | |||||
HorizontalAlignment="Center" | |||||
FontSize="35" | |||||
Text="配方筛选界面" /> | |||||
<StackPanel | |||||
Grid.Row="1" | |||||
Margin="10,0" | |||||
HorizontalAlignment="Right" | |||||
Orientation="Horizontal"> | |||||
<Button | |||||
Width="100" | |||||
Margin="20,0" | |||||
Command="{Binding AllSelectCommand}" | |||||
Content="全选" /> | |||||
<Button | |||||
Width="100" | |||||
Margin="20,0" | |||||
Command="{Binding AllCancelCommand}" | |||||
Content="取消全选" /> | |||||
<Button | |||||
Width="100" | |||||
Margin="20,0" | |||||
Command="{Binding ConfirmCommand}" | |||||
Content="确认选择" /> | |||||
<Button | |||||
Width="100" | |||||
Margin="20,0" | |||||
Command="{Binding CancelCommand}" | |||||
Content="退出" /> | |||||
</StackPanel> | |||||
<Border | |||||
Grid.Row="2" | |||||
BorderBrush="#FFA2C2E8" | |||||
BorderThickness="1"> | |||||
<!-- 视图显示 --> | |||||
<ListBox | |||||
Margin="5" | |||||
Background="Transparent" | |||||
ItemsSource="{Binding AllRecipes}" | |||||
ScrollViewer.VerticalScrollBarVisibility="Visible"> | |||||
<!--<ListBox.GroupStyle> | |||||
<GroupStyle> | |||||
<GroupStyle.ContainerStyle> | |||||
<Style BasedOn="{StaticResource ListBoxGroupStyle}" TargetType="{x:Type GroupItem}" /> | |||||
</GroupStyle.ContainerStyle> | |||||
</GroupStyle> | |||||
</ListBox.GroupStyle>--> | |||||
<ListBox.ItemTemplate> | |||||
<DataTemplate> | |||||
<StackPanel Orientation="Vertical"> | |||||
<StackPanel Orientation="Horizontal"> | |||||
<!--<CheckBox Margin="5" Command="{Binding DataContext.CheckCommand, RelativeSource={RelativeSource AncestorType=ListBox, Mode=FindAncestor}}" IsChecked="{Binding IsSelected}"> | |||||
<CheckBox.CommandParameter> | |||||
<MultiBinding Converter="{StaticResource CheckRecipeConverter}"> | |||||
<Binding Path="IsChecked" RelativeSource="{RelativeSource Self}" /> | |||||
<Binding Path="RecipeCode" /> | |||||
</MultiBinding> | |||||
</CheckBox.CommandParameter> | |||||
</CheckBox>--> | |||||
<CheckBox | |||||
Margin="5" | |||||
IsChecked="{Binding IsSelected, Mode=TwoWay}" Style="{StaticResource CheckBoxLarge}"/> | |||||
<TextBlock | |||||
Margin="10" | |||||
VerticalAlignment="Center" | |||||
FontSize="16" | |||||
Text="{Binding Recipe.RecipeCode, StringFormat=配方编号:{0}}" /> | |||||
<TextBlock | |||||
Margin="10,0" | |||||
VerticalAlignment="Center" | |||||
FontSize="16" | |||||
Text="{Binding Recipe.RecipeName, StringFormat=配方名称:{0}}" /> | |||||
</StackPanel> | |||||
<Line | |||||
Stroke="#FFA2C2E8" | |||||
StrokeThickness="3" | |||||
X1="0" | |||||
X2="1000" | |||||
Y1="0" | |||||
Y2="0" /> | |||||
</StackPanel> | |||||
</DataTemplate> | |||||
</ListBox.ItemTemplate> | |||||
</ListBox> | |||||
</Border> | |||||
</Grid> | |||||
</Border> | |||||
</Window> |
@@ -0,0 +1,31 @@ | |||||
using BPASmartClient.Helper; | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Linq; | |||||
using System.Text; | |||||
using System.Threading.Tasks; | |||||
using System.Windows; | |||||
using System.Windows.Controls; | |||||
using System.Windows.Data; | |||||
using System.Windows.Documents; | |||||
using System.Windows.Input; | |||||
using System.Windows.Media; | |||||
using System.Windows.Media.Imaging; | |||||
using System.Windows.Shapes; | |||||
namespace BPASmartClient.JXJFoodSmallStation.View | |||||
{ | |||||
/// <summary> | |||||
/// SelectRecipesView.xaml 的交互逻辑 | |||||
/// </summary> | |||||
public partial class SelectRecipesView : Window | |||||
{ | |||||
public SelectRecipesView() | |||||
{ | |||||
InitializeComponent(); | |||||
this.br.MouseLeftButtonDown += (o, e) => { if (e.LeftButton == MouseButtonState.Pressed) this.DragMove(); }; | |||||
ActionManage.GetInstance.CancelRegister("CloseSelectRecipesView"); | |||||
ActionManage.GetInstance.Register(new Action(() => { this.Close(); }), "CloseSelectRecipesView"); | |||||
} | |||||
} | |||||
} |
@@ -14,6 +14,7 @@ using System.Diagnostics; | |||||
using BPASmartClient.JXJFoodSmallStation.Model.Siemens; | using BPASmartClient.JXJFoodSmallStation.Model.Siemens; | ||||
using Google.Protobuf.WellKnownTypes; | using Google.Protobuf.WellKnownTypes; | ||||
using Newtonsoft.Json.Linq; | using Newtonsoft.Json.Linq; | ||||
using BPASmartClient.CustomResource.Pages.Model; | |||||
namespace BPASmartClient.JXJFoodSmallStation.ViewModel | namespace BPASmartClient.JXJFoodSmallStation.ViewModel | ||||
{ | { | ||||
@@ -30,7 +31,7 @@ namespace BPASmartClient.JXJFoodSmallStation.ViewModel | |||||
RecipeName = rm.RecipeName; | RecipeName = rm.RecipeName; | ||||
RecipeCode = rm.RecipeCode; | RecipeCode = rm.RecipeCode; | ||||
TrayNum = rm.TrayCode; | TrayNum = rm.TrayCode; | ||||
foreach (var item in rm.RawMaterial) | |||||
foreach (RemoteRecipeRawMaterial item in rm.RawMaterial) | |||||
{ | { | ||||
var res = Json<DevicePar>.Data.rawMaterialStockBin.FirstOrDefault(p => p.RawMaterialLocation == item.RawMaterialLocation); | var res = Json<DevicePar>.Data.rawMaterialStockBin.FirstOrDefault(p => p.RawMaterialLocation == item.RawMaterialLocation); | ||||
if (res != null && !string.IsNullOrEmpty(res.RawMaterialName)) | if (res != null && !string.IsNullOrEmpty(res.RawMaterialName)) | ||||
@@ -41,7 +42,15 @@ namespace BPASmartClient.JXJFoodSmallStation.ViewModel | |||||
item.RawMaterialName = temp.MaterialName; | item.RawMaterialName = temp.MaterialName; | ||||
} | } | ||||
} | } | ||||
AllRawMaterial.Add(item); | |||||
//AllRawMaterial.Add(item); | |||||
AllRawMaterial.Add(new RemoteRecipeRawMaterial() | |||||
{ | |||||
RawMaterialType = item.RawMaterialType, | |||||
RawMaterialName = item.RawMaterialName, | |||||
RawMaterialWeight = item.RawMaterialWeight, | |||||
RawMaterialLocation = item.RawMaterialLocation, | |||||
RawMaterialBarrelNum = item.RawMaterialBarrelNum, | |||||
}); | |||||
} | } | ||||
foreach (var item1 in rm.WindSend) | foreach (var item1 in rm.WindSend) | ||||
{ | { | ||||
@@ -115,6 +124,10 @@ namespace BPASmartClient.JXJFoodSmallStation.ViewModel | |||||
}); | }); | ||||
SaveCommand = new RelayCommand(() => | SaveCommand = new RelayCommand(() => | ||||
{ | { | ||||
if (!MessageNotify.GetInstance.ShowDialog("请确认,是否保存该配方配置?")) | |||||
{ | |||||
return; | |||||
} | |||||
if (RecipeName.Length < 0 || RecipeName == null || RecipeName == String.Empty || RecipeName == "") | if (RecipeName.Length < 0 || RecipeName == null || RecipeName == String.Empty || RecipeName == "") | ||||
{ | { | ||||
NoticeDemoViewModel.OpenMsg(EnumPromptType.Error, App.MainWindow, "错误", $"配方名称不能为空"); | NoticeDemoViewModel.OpenMsg(EnumPromptType.Error, App.MainWindow, "错误", $"配方名称不能为空"); | ||||
@@ -19,6 +19,7 @@ using BPASmartClient.CustomResource.UserControls.MessageShow; | |||||
using BPASmartClient.CustomResource.Pages.Model; | using BPASmartClient.CustomResource.Pages.Model; | ||||
using BPASmartClient.JXJFoodSmallStation.Model.Siemens; | using BPASmartClient.JXJFoodSmallStation.Model.Siemens; | ||||
using BPASmartClient.JXJFoodSmallStation.Model.GVL; | using BPASmartClient.JXJFoodSmallStation.Model.GVL; | ||||
using BPASmartClient.JXJFoodSmallStation.View; | |||||
namespace BPASmartClient.JXJFoodSmallStation.ViewModel | namespace BPASmartClient.JXJFoodSmallStation.ViewModel | ||||
{ | { | ||||
@@ -155,7 +156,31 @@ namespace BPASmartClient.JXJFoodSmallStation.ViewModel | |||||
}); | }); | ||||
ClearAllRecipe = new RelayCommand(() => | ClearAllRecipe = new RelayCommand(() => | ||||
{ | { | ||||
Json<LocalRecipeDataColl>.Data.Recipes.Clear(); | |||||
if (MessageNotify.GetInstance.ShowDialog("请确认,是否清除所有本地配方?", DialogType.Warning)) | |||||
{ | |||||
Json<LocalRecipeDataColl>.Data.Recipes.Clear(); | |||||
NoticeDemoViewModel.OpenMsg(EnumPromptType.Success, App.MainWindow, "提示", $"本地配方清空成功。"); | |||||
MessageNotify.GetInstance.ShowUserLog("手动清除所有本地配方"); | |||||
} | |||||
}); | |||||
SelectedRecipes = Json<LocalRecipeDataColl>.Data.SelectedRecipes; | |||||
SelectRecipesCommand = new RelayCommand(() => | |||||
{ | |||||
var selectView = new SelectRecipesView(); | |||||
selectView.ShowDialog(); | |||||
Json<LocalRecipeDataColl>.Data.SelectedRecipes.Clear(); | |||||
foreach (var recipe in SelectRecipesViewModel.SelectRecipes) | |||||
{ | |||||
if (recipe != null && !Json<LocalRecipeDataColl>.Data.SelectedRecipes.Any(p => p.RecipeCode == recipe.RecipeCode)) | |||||
{ | |||||
Json<LocalRecipeDataColl>.Data.SelectedRecipes.Add(recipe); | |||||
} | |||||
} | |||||
//不保存会导致下次打开本地配方下发页面,会重新读取之前存储的文件。 | |||||
Json<LocalRecipeDataColl>.Save(); | |||||
}); | }); | ||||
} | } | ||||
@@ -168,12 +193,18 @@ namespace BPASmartClient.JXJFoodSmallStation.ViewModel | |||||
public bool IsUseWindSendDosing { get { return _mIsUseWindSendDosing; } set { _mIsUseWindSendDosing = value; OnPropertyChanged(); } } | public bool IsUseWindSendDosing { get { return _mIsUseWindSendDosing; } set { _mIsUseWindSendDosing = value; OnPropertyChanged(); } } | ||||
private bool _mIsUseWindSendDosing; | private bool _mIsUseWindSendDosing; | ||||
/// <summary> | |||||
/// 筛选后的配方列表。 | |||||
/// </summary> | |||||
public static ObservableCollection<RemoteRecipeData> SelectedRecipes { get; set; } | |||||
public RelayCommand<object> DetailsCommand { get; set; } | public RelayCommand<object> DetailsCommand { get; set; } | ||||
public RelayCommand<object> IssueRecipe { get; set; } | public RelayCommand<object> IssueRecipe { get; set; } | ||||
public RelayCommand<object> RemoveRecipe { get; set; } | public RelayCommand<object> RemoveRecipe { get; set; } | ||||
public RelayCommand NewSimulateRecipe { get; set; } | public RelayCommand NewSimulateRecipe { get; set; } | ||||
public RelayCommand ClearAllRecipe { get; set; } | public RelayCommand ClearAllRecipe { get; set; } | ||||
public RelayCommand NewRecipe { get; set; } | public RelayCommand NewRecipe { get; set; } | ||||
public RelayCommand SelectRecipesCommand { get; set; } | |||||
public ObservableCollection<RemoteRecipeData> Recipes { get; set; } | public ObservableCollection<RemoteRecipeData> Recipes { get; set; } | ||||
} | } | ||||
} | } |
@@ -0,0 +1,115 @@ | |||||
using BPASmartClient.CustomResource.Pages.Model; | |||||
using BPASmartClient.Helper; | |||||
using BPASmartClient.JXJFoodSmallStation.Model; | |||||
using BPASmartClient.JXJFoodSmallStation.Model.Siemens; | |||||
using Microsoft.Toolkit.Mvvm.ComponentModel; | |||||
using Microsoft.Toolkit.Mvvm.Input; | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Collections.ObjectModel; | |||||
using System.Linq; | |||||
using System.Text; | |||||
using System.Threading.Tasks; | |||||
namespace BPASmartClient.JXJFoodSmallStation.ViewModel | |||||
{ | |||||
internal class SelectRecipesViewModel:ObservableObject | |||||
{ | |||||
public SelectRecipesViewModel() | |||||
{ | |||||
AllRecipes = new(); | |||||
foreach (var item in Json<LocalRecipeDataColl>.Data.SelectedRecipes) | |||||
{ | |||||
SelectRecipes.Add(item); | |||||
} | |||||
if (Json<LocalRecipeDataColl>.Data.Recipes != null) | |||||
{ | |||||
foreach (var item in Json<LocalRecipeDataColl>.Data.Recipes) | |||||
{ | |||||
AllRecipes.Add(new RecipeDataWithCheck() | |||||
{ | |||||
Recipe = item, | |||||
IsSelected = SelectRecipes.Any(p => p.RecipeCode == item.RecipeCode) | |||||
}); | |||||
} | |||||
} | |||||
ConfirmCommand = new(() => | |||||
{ | |||||
RefreshSelected(); | |||||
ActionManage.GetInstance.Send("CloseSelectRecipesView"); | |||||
}); | |||||
CancelCommand = new(() => | |||||
{ | |||||
ActionManage.GetInstance.Send("CloseSelectRecipesView"); | |||||
}); | |||||
AllSelectCommand = new(() => | |||||
{ | |||||
foreach (var item in AllRecipes) | |||||
{ | |||||
item.IsSelected = true; | |||||
} | |||||
}); | |||||
AllCancelCommand = new(() => | |||||
{ | |||||
foreach (var item in AllRecipes) | |||||
{ | |||||
item.IsSelected = false; | |||||
} | |||||
}); | |||||
} | |||||
private void RefreshSelected() | |||||
{ | |||||
SelectRecipes.Clear(); | |||||
foreach (var item in AllRecipes) | |||||
{ | |||||
if (item.IsSelected==true) | |||||
{ | |||||
SelectRecipes.Add(item.Recipe); | |||||
} | |||||
} | |||||
} | |||||
public ObservableCollection<RecipeDataWithCheck> AllRecipes {get; set; } | |||||
public static ObservableCollection<RemoteRecipeData> SelectRecipes { get; set; } = new ObservableCollection<RemoteRecipeData>(); | |||||
/// <summary> | |||||
/// 取消筛选,即关闭本窗口。 | |||||
/// </summary> | |||||
public RelayCommand CancelCommand { get; set; } | |||||
/// <summary> | |||||
/// 全选。 | |||||
/// </summary> | |||||
public RelayCommand AllSelectCommand { get; set; } | |||||
/// <summary> | |||||
/// 全部取消选择。 | |||||
/// </summary> | |||||
public RelayCommand AllCancelCommand { get; set; } | |||||
/// <summary> | |||||
/// 确认选择。 | |||||
/// </summary> | |||||
public RelayCommand ConfirmCommand { get; set; } | |||||
internal class RecipeDataWithCheck:ObservableObject | |||||
{ | |||||
public RemoteRecipeData Recipe { get; set; } | |||||
private bool _IsSelected; | |||||
public bool IsSelected | |||||
{ | |||||
get { return _IsSelected; } | |||||
set { _IsSelected = value; OnPropertyChanged(); } | |||||
} | |||||
} | |||||
} | |||||
} |