diff options
| author | Roy Ben-Shabat <Roy@Twine-s.com> | 2019-09-23 10:18:08 +0300 |
|---|---|---|
| committer | Roy Ben-Shabat <Roy@Twine-s.com> | 2019-09-23 10:18:08 +0300 |
| commit | d6974df76b1401f101ca3c7fc3182f73e493ca51 (patch) | |
| tree | eb0d6373d7edd84224bf91c25b0da3fcede41c03 /Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner | |
| parent | cd5a926df30ea7e7a4f4f4a55d71b43ec7aee3e1 (diff) | |
| parent | 31f6935ac607a3767fa391d87deed6d2c2a300b7 (diff) | |
| download | Tango-d6974df76b1401f101ca3c7fc3182f73e493ca51.tar.gz Tango-d6974df76b1401f101ca3c7fc3182f73e493ca51.zip | |
Merge branch 'master' of https://twinetfs.visualstudio.com/_git/Tango
Diffstat (limited to 'Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner')
5 files changed, 346 insertions, 21 deletions
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Tango.MachineStudio.MachineDesigner.csproj b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Tango.MachineStudio.MachineDesigner.csproj index d5ad86e2a..71f5ec864 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Tango.MachineStudio.MachineDesigner.csproj +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Tango.MachineStudio.MachineDesigner.csproj @@ -40,6 +40,10 @@ <Reference Include="FontAwesome.WPF, Version=4.7.0.37774, Culture=neutral, PublicKeyToken=0758b07a11a4f466, processorArchitecture=MSIL"> <HintPath>..\..\..\packages\FontAwesome.WPF.4.7.0.9\lib\net40\FontAwesome.WPF.dll</HintPath> </Reference> + <Reference Include="Google.Protobuf, Version=3.4.1.0, Culture=neutral, PublicKeyToken=a7d26565bac4d604, processorArchitecture=MSIL"> + <SpecificVersion>False</SpecificVersion> + <HintPath>..\..\..\packages\Google.Protobuf.3.4.1\lib\net45\Google.Protobuf.dll</HintPath> + </Reference> <Reference Include="MahApps.Metro, Version=1.5.0.23, Culture=neutral, PublicKeyToken=f4fb5a3c4d1e5b4f, processorArchitecture=MSIL"> <HintPath>..\..\..\packages\MahApps.Metro.1.5.0\lib\net45\MahApps.Metro.dll</HintPath> </Reference> @@ -78,6 +82,7 @@ <Compile Include="AutoComplete\MachineVersionsProvider.cs" /> <Compile Include="Contracts\IMainView.cs" /> <Compile Include="ViewModelLocator.cs" /> + <Compile Include="ViewModels\ColorCalibrationViewVM.cs" /> <Compile Include="ViewModels\MachineCreationDialogVM.cs" /> <Compile Include="ViewModels\MachineVersionDialogVM.cs" /> <Compile Include="ViewModels\MainViewVM.cs" /> @@ -237,9 +242,9 @@ <Project>{cb0b0aa2-bb24-4bca-a720-45e397684e12}</Project> <Name>Tango.MachineStudio.Common</Name> </ProjectReference> - <ProjectReference Include="..\Tango.MachineStudio.ColorLab\Tango.MachineStudio.ColorLab.csproj"> - <Project>{4d183aca-552b-4135-ae81-7c5a8e5fc3b1}</Project> - <Name>Tango.MachineStudio.ColorLab</Name> + <ProjectReference Include="..\Tango.MachineStudio.RML\Tango.MachineStudio.RML.csproj"> + <Project>{d0186ac0-0fcf-4d3b-9619-54812b6e524b}</Project> + <Name>Tango.MachineStudio.RML</Name> </ProjectReference> </ItemGroup> <ItemGroup> @@ -287,7 +292,7 @@ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <ProjectExtensions> <VisualStudio> - <UserProperties BuildVersion_StartDate="2000/1/1" BuildVersion_UseGlobalSettings="False" BuildVersion_BuildVersioningStyle="None.None.Increment.TimeStamp" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" /> + <UserProperties BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_BuildVersioningStyle="None.None.Increment.TimeStamp" BuildVersion_UseGlobalSettings="False" BuildVersion_StartDate="2000/1/1" /> </VisualStudio> </ProjectExtensions> </Project>
\ No newline at end of file diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels/ColorCalibrationViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels/ColorCalibrationViewVM.cs new file mode 100644 index 000000000..b75fe7e03 --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels/ColorCalibrationViewVM.cs @@ -0,0 +1,208 @@ +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Tango.BL; +using Tango.BL.Builders; +using Tango.BL.Entities; +using Tango.MachineStudio.Common.Notifications; +using Tango.MachineStudio.RML.Models; +using Tango.MachineStudio.RML.ViewModels; +using Tango.PMR.ColorLab; +using Tango.Settings; +using Tango.SharedUI; + +namespace Tango.MachineStudio.MachineDesigner.ViewModels +{ + public class ColorCalibrationViewVM : ViewModel + { + private INotificationProvider _notification; + private ObservablesContext _dbContext; + + #region Properties + + private ColorConversionViewVM _colorConversionViewVM; + public ColorConversionViewVM ColorConversionViewVM + { + get { return _colorConversionViewVM; } + set { _colorConversionViewVM = value; RaisePropertyChangedAuto(); } + } + + private CalibrationDataViewVM _calibrationDataViewVM; + public CalibrationDataViewVM CalibrationDataViewVM + { + get { return _calibrationDataViewVM; } + set + { + _calibrationDataViewVM = value; + RaisePropertyChangedAuto(); + OnChangeCalibrationDataViewVM(); + } + } + + private ObservableCollection<LiquidTypesRml> _liquidTypesRmls; + public ObservableCollection<LiquidTypesRml> LiquidTypesRmls + { + get { return _liquidTypesRmls; } + set + { + _liquidTypesRmls = value; + RaisePropertyChangedAuto(); + } + } + + private ObservableCollection<Rml> _rmls; + /// <summary> + /// Gets or sets the RMLS. + /// </summary> + public ObservableCollection<Rml> Rmls + { + get { return _rmls; } + set { _rmls = value; RaisePropertyChangedAuto(); } + } + + private Rml _selectedRML; + /// <summary> + /// Gets or sets the selected RML. + /// </summary> + public Rml SelectedRML + { + get { return _selectedRML; } + set + { + _selectedRML = value; + RaisePropertyChangedAuto(); + OnChangeSelectedRML(); + } + } + + private Machine _machine; + public Machine Machine + { + get { return _machine; } + set { _machine = value; RaisePropertyChangedAuto(); } + } + + #endregion + + public ColorCalibrationViewVM(INotificationProvider notification, Machine machine, ObservablesContext context) + { + _notification = notification; + _machine = machine; + _dbContext = context; + } + + private void OnChangeCalibrationDataViewVM() + { + + } + + private void OnChangeSelectedRML() + { + Invalidate(); + } + + #region RML + + public async void Invalidate() + { + if (SelectedRML != null && Machine != null) + { + IsFree = false; + + await Task.Factory.StartNew(() => + { + using (_notification.PushTaskItem("Loading RML data...")) + { + _selectedRML = new RmlBuilder(_dbContext) + .Set(_selectedRML.Guid) + .WithActiveParametersGroup() + .WithCAT(Machine.Guid) + .WithCCT() + .WithLiquidFactors().Build(); + + LiquidTypesRmls = SelectedRML.LiquidTypesRmls; + } + }); + + InvalidateCalibrationDataAndColorConversion(); + + IsFree = true; + } + } + + public void InvalidateCalibrationDataAndColorConversion() + { + if (SelectedRML != null) + { + var liquidsCalibrationData = new ObservableCollection<CalibrationDataVM>(); + CalibrationDataViewVM = new CalibrationDataViewVM(_notification, liquidsCalibrationData); + liquidsCalibrationData.EnableCrossThreadOperations(); + + foreach (var liquidTypeRml in SelectedRML.LiquidTypesRmls) + { + var idsPack = Machine.Configuration.GetSupportedIdsPacks(_selectedRML).FirstOrDefault(x => x.LiquidType == liquidTypeRml.LiquidType); + + if (idsPack != null) + { + CalibrationDataVM vm = new CalibrationDataVM(idsPack); + + var cat = idsPack.LiquidType.Cats.FirstOrDefault(x => x.Machine == Machine && x.Rml == SelectedRML); + + if (cat != null) + { + var calData = cat.GetCalibrationData(); + vm.CalibrationPoints = calData.CalibrationPoints.Select(x => new CalibrationDataPointVM(x)).ToObservableCollection(); + } + + liquidsCalibrationData.Add(vm); + } + } + + ColorConversionViewVM = new ColorConversionViewVM(_notification) + { + RML = SelectedRML, + CCT = new CctModel() + { + Data = SelectedRML.Cct?.Data, + }, + LiquidsCalibrationData = CalibrationDataViewVM.LiquidsCalibrationData, + LiquidTypesRmls = LiquidTypesRmls, + }; + } + } + + #endregion + + #region Save + + public void Save() + { + foreach (var calDataVM in ColorConversionViewVM.LiquidsCalibrationData) + { + var cat = calDataVM.IdsPack.LiquidType.Cats.FirstOrDefault(x => x.Machine == Machine && x.Rml == SelectedRML); + + if (cat == null) + { + cat = new Cat(); + cat.Name = "untitled"; + _dbContext.Cats.Add(cat); + } + + cat.Rml = SelectedRML; + cat.Machine = Machine; + cat.LiquidType = calDataVM.IdsPack.LiquidType; + + CalibrationData calData = new CalibrationData(); + calData.LiquidType = (PMR.ColorLab.LiquidType)cat.LiquidType.Code; + calData.CalibrationPoints.AddRange(calDataVM.CalibrationPoints.Select(x => new CalibrationPoint() { X = x.X, Y = x.Y })); + + cat.PutCalibrationData(calData); + } + } + + #endregion + } +} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels/MainViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels/MainViewVM.cs index 935cfe5ee..eaca7cd6a 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels/MainViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels/MainViewVM.cs @@ -22,6 +22,9 @@ using Tango.BL.Builders; using Tango.MachineStudio.MachineDesigner.Contracts; using System.Windows.Threading; using Tango.Core.Threading; +using Tango.MachineStudio.RML.ViewModels; +using Tango.Settings; +using Tango.MachineStudio.RML.Models; namespace Tango.MachineStudio.MachineDesigner.ViewModels { @@ -112,11 +115,11 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels set { _selectedSpool = value; RaisePropertyChangedAuto(); InvalidateRelayCommands(); } } - private ColorLab.ViewModels.MainViewVM _colorLabVM; - public ColorLab.ViewModels.MainViewVM ColorLabVM + private ColorCalibrationViewVM _colorCalibrationViewVM; + public ColorCalibrationViewVM ColorCalibrationViewVM { - get { return _colorLabVM; } - set { _colorLabVM = value; RaisePropertyChangedAuto(); } + get { return _colorCalibrationViewVM; } + set { _colorCalibrationViewVM = value; RaisePropertyChangedAuto(); } } #endregion @@ -210,7 +213,7 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels public override async void OnApplicationReady() { MachinesAdapter.MachineVersions = (await MachinesAdapter.Context.MachineVersions.ToListAsync()).ToObservableCollection(); - ColorLabVM = new ColorLab.ViewModels.MainViewVM(_notification) { IsHosted = true }; + } #endregion @@ -239,7 +242,7 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels public void DropIdsPack(IdsPack idsPack1, IdsPack idsPack2) { ActiveMachine.Configuration.IdsPacks.Swap(idsPack1, idsPack2); - ColorLabVM.InvalidateLiquidFactorsCalibrationData(); + ColorCalibrationViewVM.InvalidateCalibrationDataAndColorConversion(); } /// <summary> @@ -334,7 +337,7 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels { idsPack.LiquidType = liquidType; idsPack.LiquidTypeGuid = liquidType.Guid; - ColorLabVM.InvalidateLiquidFactorsCalibrationData(); + ColorCalibrationViewVM.InvalidateCalibrationDataAndColorConversion(); } /// <summary> @@ -360,7 +363,7 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels { ActiveMachineAdapter.Context.IdsPacks.Remove(SelectedIds); SelectedIds = null; - ColorLabVM.InvalidateLiquidFactorsCalibrationData(); + ColorCalibrationViewVM.InvalidateCalibrationDataAndColorConversion(); } /// <summary> @@ -432,7 +435,12 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels } } - ColorLabVM.InitHost(ActiveMachineAdapter.Context, ActiveMachine, ActiveMachineAdapter.Rmls, ActiveMachineAdapter.Rmls.FirstOrDefault()); + ColorCalibrationViewVM = new ColorCalibrationViewVM(_notification, ActiveMachine, _activeMachineAdapter.Context) + { + Rmls = ActiveMachineAdapter.Rmls, + LiquidTypesRmls = ActiveMachineAdapter.Rmls.FirstOrDefault().LiquidTypesRmls, + SelectedRML = ActiveMachineAdapter.Rmls.FirstOrDefault(), + }; View.NavigateTo(MachineDesignerNavigationView.MachineDetailsView); } @@ -574,14 +582,17 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels ActiveMachine.ConfigurationGuid = ActiveMachine.Configuration.Guid; ActiveMachine.LastUpdated = DateTime.UtcNow; ActiveMachine.ProductionDate = DateTime.UtcNow; - await ActiveMachineAdapter.Context.SaveChangesAsync(); - await ColorLabVM.SaveChanges(); + ColorCalibrationViewVM.Save(); + + await ActiveMachineAdapter.Context.SaveChangesAsync(); if (SelectedMachine != null) { await SelectedMachine.Reload(MachinesAdapter.Context); } + + ColorCalibrationViewVM.Invalidate(); } } catch (Exception ex) @@ -669,9 +680,19 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels { Task.Factory.StartNew(() => { - IsFree = false; - MachinesAdapter.Machines = MachinesAdapter.Context.Machines.Where(x => x.SerialNumber.StartsWith(Filter)).Include(x => x.Organization).Include(x => x.MachineVersion).ToSynchronizedObservableCollection(); - IsFree = true; + try + { + IsFree = false; + MachinesAdapter.Machines = MachinesAdapter.Context.Machines.Where(x => x.SerialNumber.StartsWith(Filter)).Include(x => x.Organization).Include(x => x.MachineVersion).ToSynchronizedObservableCollection(); + } + catch + { + + } + finally + { + IsFree = true; + } }); }); } diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/ColorCalibrationView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/ColorCalibrationView.xaml index e73c9661f..0d8acbc53 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/ColorCalibrationView.xaml +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/ColorCalibrationView.xaml @@ -11,10 +11,101 @@ xmlns:controls="clr-namespace:Tango.SharedUI.Controls;assembly=Tango.SharedUI" xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes" xmlns:converters="clr-namespace:Tango.SharedUI.Converters;assembly=Tango.SharedUI" - xmlns:colorLab="clr-namespace:Tango.MachineStudio.ColorLab.Views;assembly=Tango.MachineStudio.ColorLab" + xmlns:rml="clr-namespace:Tango.MachineStudio.RML.Views;assembly=Tango.MachineStudio.RML" + xmlns:commonControls="clr-namespace:Tango.MachineStudio.Common.Controls;assembly=Tango.MachineStudio.Common" + xmlns:shapes="clr-namespace:Tango.SharedUI.Shapes;assembly=Tango.SharedUI" mc:Ignorable="d" d:DesignHeight="1080" d:DesignWidth="1920" Background="Transparent" d:DataContext="{d:DesignInstance Type=vm:MainViewVM, IsDesignTimeCreatable=False}" DataContext="{x:Static global:ViewModelLocator.MainViewVM}"> + + <UserControl.Resources> + <converters:ColorToIntegerConverter x:Key="ColorToIntegerConverter"></converters:ColorToIntegerConverter> + <converters:ColorComponentToOpacityConverter x:Key="ColorComponentToOpacityConverter" /> + <converters:ColorToComponentsConverter x:Key="ColorToComponentsConverter" /> + <converters:NullObjectToBooleanConverter x:Key="NullObjectToBooleanConverter" /> + <converters:ObjectToObjectTypeConverter x:Key="ObjectToObjectTypeConverter" /> + <converters:BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" /> + <converters:BooleanInverseConverter x:Key="BooleanInverseConverter" /> + <converters:BooleanToVisibilityInverseConverter x:Key="BooleanToVisibilityInverseConverter" /> + </UserControl.Resources> <Grid> - <colorLab:MainView DataContext="{Binding ColorLabVM}" /> + <Grid DataContext="{Binding ColorCalibrationViewVM}"> + <Grid.ColumnDefinitions> + <ColumnDefinition Width="500"/> + <ColumnDefinition Width="1*"/> + </Grid.ColumnDefinitions> + + <Grid> + <StackPanel> + <commonControls:MachineView Width="500" Margin="0 40 0 0" DataContext="{Binding Machine}" /> + <StackPanel Margin="40 40"> + <TextBlock FontSize="16">MEDIA</TextBlock> + <ComboBox ItemsSource="{Binding Rmls}" SelectedItem="{Binding SelectedRML}" FontSize="16" IsEnabled="{Binding Machine,Converter={StaticResource NullObjectToBooleanConverter}}" Background="Transparent" Style="{StaticResource TransparentComboBoxStyle}" > + + <ComboBox.ItemTemplate> + <DataTemplate> + <StackPanel> + <TextBlock Text="{Binding Name}" FontWeight="Bold" FontStyle="Italic" Foreground="{StaticResource MainWindow.Foreground}"></TextBlock> + <TextBlock FontSize="11" Text="{Binding Manufacturer}" Foreground="{StaticResource GrayBrush}"></TextBlock> + </StackPanel> + </DataTemplate> + </ComboBox.ItemTemplate> + </ComboBox> + + + <TextBlock FontSize="16" Margin="0 40 0 0">LIQUID FACTORS</TextBlock> + <ItemsControl ItemsSource="{Binding LiquidTypesRmls}" Margin="0 10 0 0" IsEnabled="False"> + <ItemsControl.ItemsPanel> + <ItemsPanelTemplate> + <WrapPanel IsItemsHost="True"></WrapPanel> + </ItemsPanelTemplate> + </ItemsControl.ItemsPanel> + <ItemsControl.ItemTemplate> + <DataTemplate DataType="{x:Type observables:LiquidTypesRml}"> + <StackPanel Margin="0 0 10 0"> + <TextBlock HorizontalAlignment="Center" FontSize="10" Foreground="{StaticResource Hexagon.ForegroundBrush}" Text="{Binding LiquidType.Name}"></TextBlock> + <Grid Width="58" Height="48" Margin="0 5 0 0"> + <shapes:Hexagon StrokeThickness="1" Stroke="{StaticResource GrayBrush}"> + <shapes:Hexagon.Fill> + <LinearGradientBrush Opacity="0.7" > + <GradientStop Color="{Binding LiquidType.Color,Converter={StaticResource ColorToIntegerConverter}}"/> + <GradientStop Color="White" Offset="1"/> + </LinearGradientBrush> + </shapes:Hexagon.Fill> + </shapes:Hexagon> + + <TextBox Style="{x:Null}" Background="Transparent" BorderThickness="0" Text="{Binding MaxNlPerCm}" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" FontWeight="Bold" FontStyle="Italic" Foreground="{StaticResource Hexagon.ForegroundBrush}"/> + </Grid> + </StackPanel> + </DataTemplate> + </ItemsControl.ItemTemplate> + </ItemsControl> + </StackPanel> + </StackPanel> + </Grid> + + <Grid Grid.Column="1"> + <Grid> + <Grid.RowDefinitions> + <RowDefinition Height="1*"/> + <RowDefinition Height="370"/> + </Grid.RowDefinitions> + + <rml:ColorConversionView DataContext="{Binding ColorConversionViewVM}" /> + <Grid Grid.Row="1"> + <Rectangle VerticalAlignment="Top" Stroke="{StaticResource borderBrush}"></Rectangle> + <DockPanel> + <Grid DockPanel.Dock="Top"> + <TextBlock FontSize="20" Margin="0 20 0 0" TextAlignment="Center">CALIBRATION DATA</TextBlock> + </Grid> + + <ScrollViewer x:Name="calibrationDataScrollViewer" VerticalScrollBarVisibility="Disabled" HorizontalScrollBarVisibility="Auto" Margin="15 0 20 0"> + <rml:CalibrationDataView DataContext="{Binding CalibrationDataViewVM}" /> + + </ScrollViewer> + </DockPanel> + </Grid> + </Grid> + </Grid> + </Grid> </Grid> </UserControl> diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/MachinesView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/MachinesView.xaml index 466e6f458..35b578b6a 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/MachinesView.xaml +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/MachinesView.xaml @@ -25,7 +25,7 @@ <StackPanel Orientation="Horizontal" VerticalAlignment="Bottom" Margin="0 0 0 10"> <materialDesign:PackIcon VerticalAlignment="Center" Kind="BarcodeScan" Width="32" Height="32" /> - <TextBox Width="400" FontSize="20" Margin="10 0 0 0" materialDesign:HintAssist.Hint="Serial Number" Text="{Binding Filter,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"></TextBox> + <TextBox Width="400" FontSize="20" Margin="10 0 0 0" materialDesign:HintAssist.Hint="Serial Number" Text="{Binding Filter,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged,Delay=500}"></TextBox> </StackPanel> </StackPanel> </Grid> |
