添加 MX-PD-盘古 项目文件
将 MX-PD-盘古 - new 目录下的所有文件添加到主仓库
This commit is contained in:
215
MX-PD-盘古 - new/PanGu.DieBonderApp/plans/recipe-code-review.md
Normal file
215
MX-PD-盘古 - new/PanGu.DieBonderApp/plans/recipe-code-review.md
Normal file
@@ -0,0 +1,215 @@
|
||||
# Recipe ģ<><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><C4B1><EFBFBD>
|
||||
|
||||
## һ<><D2BB><EFBFBD>ܹ<EFBFBD><DCB9><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
<EFBFBD>䷽ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MVVM <20>ܹ<EFBFBD><DCB9><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>IJ<EFBFBD><C4B2>䷽<EFBFBD><E4B7BD>ϵ<EFBFBD><CFB5>Carrier <20><> Substrate <20><> Wafer <20><> Process<73><73><EFBFBD>γɼ<CEB3><C9BC><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5>ʹ<EFBFBD><CAB9> Stylet <20><><EFBFBD><EFBFBD> + JSON <20>ļ<EFBFBD><C4BC>־û<D6BE><C3BB><EFBFBD>
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
A[CarrierRecipe <20>ؾ<EFBFBD><D8BE>䷽] --> B[SubstrateRecipe <20><><EFBFBD><EFBFBD><EFBFBD>䷽]
|
||||
B --> C[WaferRecipe оƬ<D0BE>䷽]
|
||||
C --> D[ProcessRecipe <20><><EFBFBD><EFBFBD><EFBFBD>䷽]
|
||||
|
||||
E[RecipeManager] --> A
|
||||
E --> B
|
||||
E --> C
|
||||
E --> D
|
||||
|
||||
F[RecipeWrapManager] --> G[RecipeWrap <20>б<EFBFBD>]
|
||||
|
||||
H[RecipeViewModel] --> I[CarrierRecipeViewModel]
|
||||
H --> J[SubstrateRecipeViewModel]
|
||||
H --> K[WaferRecipeViewModel]
|
||||
H --> L[ProcessRecipeViewModel]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
### <20><><EFBFBD><EFBFBD> 1<><31>ViewModel <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>صĴ<D8B5><C4B4><EFBFBD><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD>
|
||||
|
||||
`CarrierRecipeViewModel`<EFBFBD><EFBFBD>`SubstrateRecipeViewModel`<EFBFBD><EFBFBD>`WaferRecipeViewModel`<EFBFBD><EFBFBD>`ProcessRecipeViewModel` <20>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DFBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB>ͬ<EFBFBD><CDAC>
|
||||
|
||||
- `SelectedRecipeWrap` <20><><EFBFBD>Ե<EFBFBD> setter <20><EFBFBD><DFBC><EFBFBD><EFBFBD>뿪<EFBFBD><EBBFAA><EFBFBD><EFBFBD> + <20><><EFBFBD><EFBFBD><EFBFBD>䷽ + <20><><EFBFBD>գ<EFBFBD>
|
||||
- `RegisterButtonGroupEvents()` <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>18 <20><><EFBFBD>¼<EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫһ<C8AB>£<EFBFBD>
|
||||
- `TryLeaveCurrentRecipeContext()` <20><><EFBFBD><EFBFBD>
|
||||
- `SaveCurrentRecipe()` / `CaptureSavedSnapshot()` / `IsRecipeDirty()` / `SelectRecipeWrapInternal()` <20><><EFBFBD><EFBFBD>
|
||||
- `OnCreateNewRecipe` / `OnDeleteRecipe` / `OnOpenRecipe` / `OnSaveRecipe` / `OnClearRecipe` <20><><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
**<EFBFBD>Ľ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>**<2A><><EFBFBD><EFBFBD>ȡһ<C8A1><D2BB><EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD> `RecipeViewModelBase<TRecipe> where TRecipe : RecipeBase`<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>³<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD>踲д<EFBFBD><EFBFBD><EFBFBD>첿<EFBFBD>֣<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>䷽<EFBFBD>ľ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͡<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
---
|
||||
|
||||
### <20><><EFBFBD><EFBFBD> 2<><32>RecipeButtonGroupViewModel <20><> ViewModel <20><>ֱ<EFBFBD>Ӵ<EFBFBD><D3B4><EFBFBD> View<65><77><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD>
|
||||
|
||||
`RecipeButtonGroupViewModel.ShowRecipeWindow<TWindow, TViewModel>()` <20><><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1> `new TWindow()`<EFBFBD><EFBFBD>Υ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> MVVM <20>ĺ<EFBFBD><C4BA><EFBFBD>ԭ<EFBFBD><EFBFBD>ViewModel <20><>Ӧֱ<D3A6>Ӵ<EFBFBD><D3B4><EFBFBD><EFBFBD><EFBFBD><CDB9><EFBFBD> View<65><77>
|
||||
|
||||
**<EFBFBD>Ľ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>**<2A><>ʹ<EFBFBD><CAB9> Stylet <20><> `IWindowManager.ShowDialog()` <20><><EFBFBD><EFBFBD>ʾ<EFBFBD>Ի<EFBFBD><D4BB>ڣ<F2B4B0BF><DAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB> `IDialogService` <20>ӿ<EFBFBD><D3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
---
|
||||
|
||||
### <20><><EFBFBD><EFBFBD> 3<><33>RecipeNameWindowModel <20><> RecipeReNameWindowModel <20><><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD>
|
||||
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><EFBFBD><EFBFBD><EFBFBD>`OkCommand`/`CancelCommand`<EFBFBD><EFBFBD>`UpdateValidationMessage()` <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫһ<C8AB>£<EFBFBD>`RecipeReNameWindowModel` <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB> `OldRecipeName` <20><><EFBFBD>ԡ<EFBFBD>
|
||||
|
||||
**<EFBFBD>Ľ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>**<2A><><EFBFBD><EFBFBD> `RecipeReNameWindowModel` <20>̳<EFBFBD> `RecipeNameWindowModel`<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ࡣ
|
||||
|
||||
---
|
||||
|
||||
### <20><><EFBFBD><EFBFBD> 4<><34>RecipeBase ͬʱʵ<CAB1><CAB5> INotifyPropertyChanged <20>ͼ̳<CDBC> JsonFileWritableBase<73><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD>
|
||||
|
||||
`RecipeBase` <20>ֶ<EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD> `INotifyPropertyChanged`<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> `SetProperty<T>` <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD> `SubstrateInfo`<EFBFBD><EFBFBD>`MarkData` <20>ȣ<EFBFBD><C8A3>̳е<CCB3><D0B5><EFBFBD> Stylet <20><> `PropertyChangedBase`<EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD> `SetAndNotify`<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD><EFBFBD>֪ͨ<EFBFBD><EFBFBD><EFBFBD>ơ<EFBFBD>
|
||||
|
||||
**<EFBFBD>Ľ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>**<2A><>ͳһ֪ͨ<CDA8><D6AA><EFBFBD>ơ<EFBFBD><C6A1><EFBFBD><EFBFBD><EFBFBD> `JsonFileWritableBase` <20><><EFBFBD>ܼ̳<DCBC> `PropertyChangedBase`<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳У<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> `RecipeBase` Ҳʹ<D2B2><CAB9> Stylet <20><>֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʩ<EFBFBD><CAA9>
|
||||
|
||||
---
|
||||
|
||||
### <20><><EFBFBD><EFBFBD> 5<><35>CameraBaseViewModel <20><><EFBFBD><EFBFBD> Models Ŀ¼<C4BF>£<EFBFBD><C2A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD>
|
||||
|
||||
`CameraBaseViewModel` <20><>һ<EFBFBD><D2BB> ViewModel <20><><EFBFBD>࣬<EFBFBD><E0A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> `Recipe/Models/` Ŀ¼<C4BF>£<EFBFBD>Υ<EFBFBD><CEA5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD>ķֲ<C4B7>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD>
|
||||
|
||||
**<EFBFBD>Ľ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>**<2A><><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD> `Recipe/ViewModel/` Ŀ¼<C4BF><C2BC>
|
||||
|
||||
---
|
||||
|
||||
### <20><><EFBFBD><EFBFBD> 6<><36><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƴд<C6B4><D0B4><EFBFBD><EFBFBD><F3A3A8B5><EFBFBD><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD>
|
||||
|
||||
- `SubtrateMarkPars` <20><> ӦΪ `SubstrateMarkPars`<EFBFBD><EFBFBD>ȱ<EFBFBD><EFBFBD> `s`<EFBFBD><EFBFBD>
|
||||
- `SubtrateMarkParameterInfo` <20><> ӦΪ `SubstrateMarkParameterInfo`
|
||||
- `ThickNess` <20><> ӦΪ `Thickness`<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Сд<EFBFBD><EFBFBD>һ<EFBFBD>£<EFBFBD>
|
||||
- `PIDOperater` <20><> ӦΪ `PIDOperator`
|
||||
|
||||
**<EFBFBD>Ľ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>**<2A><>ͳһ<CDB3><D2BB><EFBFBD><EFBFBD>ƴд<C6B4><D0B4>ʹ<EFBFBD><CAB9> IDE <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD>¡<EFBFBD>
|
||||
|
||||
---
|
||||
|
||||
### <20><><EFBFBD><EFBFBD> 7<><37>PIDOperater ʹ<>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԣ<EFBFBD><D4A3><EFBFBD>ͨ<EFBFBD><CDA8> IoC.Get <20><>̬<EFBFBD><CCAC><EFBFBD>û<EFBFBD>ȡӲ<C8A1><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD>
|
||||
|
||||
`PIDOperater.SendPIDParameters()` <20><> `ReadPIDParametersFromDevice()` ʹ<>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д PID <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܲ<EFBFBD><DCB2><EFBFBD><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD>ά<EFBFBD><CEAC><EFBFBD><EFBFBD>ͬʱ `GetControler()` ͨ<><CDA8> `IoC.Get<HardwareManager>()` <20><>̬<EFBFBD><CCAC><EFBFBD>û<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Υ<EFBFBD><CEA5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD>
|
||||
|
||||
**<EFBFBD>Ľ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>**<2A><>
|
||||
- <20><> `IMotionController` <20><> `HardwareManager` ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD>캯<EFBFBD><ECBAAF>ע<EFBFBD><D7A2>
|
||||
- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>淴<EFBFBD><E6B7B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
---
|
||||
|
||||
### <20><><EFBFBD><EFBFBD> 8<><38>RecipeManager <20><>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȱ<EFBFBD><C8B1><EFBFBD>쳣<EFBFBD><ECB3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD>
|
||||
|
||||
`DeleteCarrierRecipe` / `DeleteSubstrateRecipe` / `DeleteWaferRecipe` / `DeleteProcessRecipe` ֱ<>ӵ<EFBFBD><D3B5><EFBFBD> `Directory.Delete(path, true)` <20><>û<EFBFBD><C3BB><EFBFBD>κ<EFBFBD><CEBA>쳣<EFBFBD><ECB3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ¼<C4BF><C2BC><EFBFBD><EFBFBD><EFBFBD>ڻ<EFBFBD><DABB><EFBFBD>ռ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD>׳<EFBFBD><D7B3>쳣<EFBFBD><ECB3A3>
|
||||
|
||||
**<EFBFBD>Ľ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>**<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> try-catch <20>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD>Լ<EFBFBD><D4BC>飬<EFBFBD><E9A3AC><EFBFBD>ز<EFBFBD><D8B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>
|
||||
|
||||
---
|
||||
|
||||
### <20><><EFBFBD><EFBFBD> 9<><39>OnCopyRecipe / OnImportRecipe / OnExportRecipe Ϊ<><CEAA>ʵ<EFBFBD>֣<EFBFBD><D6A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD>
|
||||
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> ViewModel <20>е<EFBFBD> `OnCopyRecipe`<EFBFBD><EFBFBD>`OnImportRecipe`<EFBFBD><EFBFBD>`OnExportRecipe` <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>գ<EFBFBD><D5A3><EFBFBD><EFBFBD><EFBFBD>δʵ<CEB4>֡<EFBFBD>
|
||||
|
||||
**<EFBFBD>Ľ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>**<2A><>Ҫôʵ<C3B4><CAB5><EFBFBD><EFBFBD>Щ<EFBFBD><D0A9><EFBFBD>ܣ<EFBFBD>Ҫô<D2AA><C3B4> UI <20>Ͻ<EFBFBD><CFBD>ö<EFBFBD>Ӧ<EFBFBD><D3A6>ť<EFBFBD><C5A5>ͨ<EFBFBD><CDA8> `CanExecute` <20><><EFBFBD><EFBFBD> false<73><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>
|
||||
|
||||
---
|
||||
|
||||
### <20><><EFBFBD><EFBFBD> 10<31><30>CarrierRecipeViewModel.OnViewLoaded <20><>ֱ<EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD> RecipeWraps[0] <20><><EFBFBD><EFBFBD>Խ<EFBFBD>磨<EFBFBD><E7A3A8><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD>
|
||||
|
||||
```csharp
|
||||
// CarrierRecipeViewModel.cs:248
|
||||
RecipeWraps[0].IsInUse = true;
|
||||
```
|
||||
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> `RecipeWraps` Ϊ<>ռ<EFBFBD><D5BC>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׳<EFBFBD> `ArgumentOutOfRangeException`<EFBFBD><EFBFBD>
|
||||
|
||||
**<EFBFBD>Ľ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>**<2A><><EFBFBD><EFBFBD><EFBFBD>ӿռ<D3BF><D5BC>ϼ<EFBFBD><CFBC>顣
|
||||
|
||||
---
|
||||
|
||||
### <20><><EFBFBD><EFBFBD> 11<31><31>SubstrateRecipeViewModel.OnViewLoaded <20><> SelectedRecipeWrap <20><><EFBFBD><EFBFBD>Ϊ null<6C><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD>
|
||||
|
||||
```csharp
|
||||
// SubstrateRecipeViewModel.cs:498-499
|
||||
SelectedRecipeWrap = RecipeWraps.Where(...).FirstOrDefault();
|
||||
SelectedRecipeWrap.IsInUse = true; // <20><><EFBFBD><EFBFBD> NullReferenceException
|
||||
```
|
||||
|
||||
`FirstOrDefault()` <20><><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD> null<6C><6C>ֱ<EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD> `.IsInUse` <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
**<EFBFBD>Ľ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>**<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> null <20><><EFBFBD>顣
|
||||
|
||||
---
|
||||
|
||||
### <20><><EFBFBD><EFBFBD> 12<31><32>RecipeWrapManager.Handle <20><><EFBFBD><EFBFBD><EFBFBD>и<EFBFBD><D0B8><EFBFBD>ͬһ<CDAC><D2BB> CarrierRecipe ʵ<><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD>
|
||||
|
||||
```csharp
|
||||
// RecipeWrapManager.cs:74
|
||||
CarrierRecipe carrierRecipe = new CarrierRecipe();
|
||||
foreach (var carrierWrap in CarrierRecipeWraps)
|
||||
{
|
||||
carrierRecipe.RecipeName = carrierWrap.RecipeName;
|
||||
carrierRecipe.Read();
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
<EFBFBD><EFBFBD>ѭ<EFBFBD><EFBFBD><EFBFBD>и<EFBFBD><EFBFBD><EFBFBD>ͬһ<EFBFBD><EFBFBD> `CarrierRecipe` ʵ<><CAB5><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF> `Read()` <20>Ḳ<EFBFBD><E1B8B2><EFBFBD><EFBFBD>һ<EFBFBD>ε<EFBFBD><CEB5><EFBFBD><EFBFBD>ݡ<EFBFBD><DDA1><EFBFBD>Ȼ<EFBFBD><C8BB><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD><CFBF><EFBFBD>û<EFBFBD><C3BB><EFBFBD>⣬<EFBFBD><E2A3AC><EFBFBD><EFBFBD><EFBFBD>岻<EFBFBD><E5B2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> `Read()` ʧ<>ܿ<EFBFBD><DCBF>ܵ<EFBFBD><DCB5>²<EFBFBD><C2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݡ<EFBFBD>
|
||||
|
||||
**<EFBFBD>Ľ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>**<2A><>ÿ<EFBFBD><C3BF>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD>
|
||||
|
||||
---
|
||||
|
||||
### <20><><EFBFBD><EFBFBD> 13<31><33>MarkTeachViewModel ֱ<>ӳ<EFBFBD><D3B3><EFBFBD> Window <20><><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD>
|
||||
|
||||
```csharp
|
||||
private MarkCoordinatePreviewWindow _coordinatePreviewWindow;
|
||||
```
|
||||
|
||||
ViewModel ֱ<>ӳ<EFBFBD><D3B3><EFBFBD> `Window` ʵ<><CAB5><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>Υ<EFBFBD><CEA5> MVVM ԭ<><D4AD><EFBFBD><EFBFBD>
|
||||
|
||||
**<EFBFBD>Ľ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>**<2A><>ʹ<EFBFBD><CAB9> `IWindowManager` <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD><DAA3><EFBFBD>ͨ<EFBFBD><CDA8> Messenger/EventAggregator ֪ͨ View <20><><EFBFBD><EFBFBD><F2BFAAB4>ڡ<EFBFBD>
|
||||
|
||||
---
|
||||
|
||||
### <20><><EFBFBD><EFBFBD> 14<31><34><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɢ<EFBFBD><C9A2><EFBFBD>ڲ<EFBFBD>ͬλ<CDAC>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD>
|
||||
|
||||
- `RecipeEventArgs` / `RecipeRenameEventArgs` <20><> `Recipe/Models/RecipeEventArgs.cs` <20><>
|
||||
- `SubstrateNameChangedEventArgs` <20><><EFBFBD><EFBFBD> `EventArgsFolder/RecipeNameChangedEventArgs.cs` <20>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD> `MainShell`
|
||||
|
||||
**<EFBFBD>Ľ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>**<2A><>ͳһ<CDB3>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC>ʹ<EFBFBD><CDB4><EFBFBD>λ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> `Recipe/Models/` <20><>ר<EFBFBD>ŵ<EFBFBD> `Recipe/Events/` Ŀ¼<C4BF>¡<EFBFBD>
|
||||
|
||||
---
|
||||
|
||||
### <20><><EFBFBD><EFBFBD> 15<31><35>SubstrateHeightMeasureSetting <20><> SubstrateHeightMeasurePoint δʵ<CEB4><CAB5> IParameterItem<65><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD>
|
||||
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD>ࣨ<EFBFBD><EFBFBD> `SubstrateInfo`<EFBFBD><EFBFBD>`CarrierInfo`<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> `IParameterItem` <20>ӿ<EFBFBD><D3BF><EFBFBD>֧<EFBFBD><D6A7> `Clone()`<EFBFBD><EFBFBD><EFBFBD><EFBFBD> `SubstrateHeightMeasureSetting` <20><> `SubstrateHeightMeasurePoint` û<><C3BB>ʵ<EFBFBD>֣<EFBFBD><D6A3><EFBFBD><EFBFBD>ܵ<EFBFBD><DCB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD>/<2F><>¡ʱ<C2A1><CAB1>Ϊ<EFBFBD><CEAA>һ<EFBFBD>¡<EFBFBD>
|
||||
|
||||
**<EFBFBD>Ľ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>**<2A><>ͳһʵ<D2BB><CAB5> `IParameterItem` <20>ӿڡ<D3BF>
|
||||
|
||||
---
|
||||
|
||||
### <20><><EFBFBD><EFBFBD> 16<31><36>ActiveRecipeService δ<><CEB4>ʹ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD>
|
||||
|
||||
`IActiveRecipeService<T>` <20><> `ActiveRecipeService<T>` <20><><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><CBB5><EFBFBD> Recipe ģ<><C4A3><EFBFBD><EFBFBD>δ<EFBFBD><CEB4>ʹ<EFBFBD>á<EFBFBD>
|
||||
|
||||
**<EFBFBD>Ľ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>**<2A><>ȷ<EFBFBD><C8B7><EFBFBD>Ƿ<EFBFBD>Ϊδ<CEAA><CEB4>Ԥ<EFBFBD><D4A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>Ƴ<EFBFBD><C6B3>Լ<EFBFBD><D4BC>ٴ<EFBFBD><D9B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
---
|
||||
|
||||
## <20><><EFBFBD><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
| <20><><EFBFBD>ȼ<EFBFBD> | <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> | <20><><EFBFBD><EFBFBD> |
|
||||
|--------|---------|------|
|
||||
| <20><> | 1 | <20>ĸ<EFBFBD> RecipeViewModel <20><><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD> |
|
||||
| <20><> | 10 | CarrierRecipeViewModel.OnViewLoaded <20><><EFBFBD><EFBFBD>Խ<EFBFBD><D4BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |
|
||||
| <20><> | 11 | SubstrateRecipeViewModel.OnViewLoaded <20><><EFBFBD><EFBFBD><EFBFBD>÷<EFBFBD><C3B7><EFBFBD> |
|
||||
| <20><> | 2 | ButtonGroupViewModel ֱ<>Ӵ<EFBFBD><D3B4><EFBFBD> View |
|
||||
| <20><> | 3 | <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Model <20><><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD> |
|
||||
| <20><> | 4 | <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD>֪ͨ<CDA8><D6AA><EFBFBD>Ʋ<EFBFBD><C6B2><EFBFBD> |
|
||||
| <20><> | 7 | PIDOperater <20><><EFBFBD><EFBFBD> + <20><>̬ IoC <20><><EFBFBD><EFBFBD> |
|
||||
| <20><> | 8 | ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȱ<EFBFBD><C8B1><EFBFBD>쳣<EFBFBD><ECB3A3><EFBFBD><EFBFBD> |
|
||||
| <20><> | 12 | RecipeWrapManager ѭ<><D1AD><EFBFBD>и<EFBFBD><D0B8><EFBFBD>ʵ<EFBFBD><CAB5> |
|
||||
| <20><> | 13 | MarkTeachViewModel <20><><EFBFBD><EFBFBD> Window <20><><EFBFBD><EFBFBD> |
|
||||
| <20><> | 5 | CameraBaseViewModel <20>Ŵ<EFBFBD>Ŀ¼ |
|
||||
| <20><> | 6 | <20><><EFBFBD><EFBFBD>ƴд<C6B4><D0B4><EFBFBD><EFBFBD> |
|
||||
| <20><> | 9 | <20><>ʵ<EFBFBD>ֵIJ<D6B5><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |
|
||||
| <20><> | 14 | <20>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD>÷<EFBFBD>ɢ |
|
||||
| <20><> | 15 | <20><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>δʵ<CEB4><CAB5> IParameterItem |
|
||||
| <20><> | 16 | ActiveRecipeService δʹ<CEB4><CAB9> |
|
||||
Reference in New Issue
Block a user