using Prism.Commands;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;
using System.Runtime.CompilerServices;
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.Navigation;
using System.Windows.Shapes;
using TeamAAS_VP.Models;
using TeamAAS_VP.Models.Product;
namespace TeamAAS_VP.Controls
{
///
/// ParameterEdit.xaml 的交互逻辑
///
public partial class ParameterEdit : UserControl, INotifyPropertyChanged
{
public ParameterEdit()
{
InitializeComponent();
DataContext = this;
}
private ProductGlobalParam _SelectParam;
public ProductGlobalParam SelectParam
{
get { return _SelectParam; }
set { SetProperty(ref _SelectParam,value); }
}
///
/// 产品全局参数集合 依赖属性(支持外部 Binding)
///
public static readonly DependencyProperty GlobalParamListCollectionProperty =
DependencyProperty.Register(
nameof(GlobalParamListCollection),
typeof(ObservableCollection),
typeof(ParameterEdit),
new PropertyMetadata(new ObservableCollection()));
///
/// 公开可绑定属性
///
public ObservableCollection GlobalParamListCollection
{
get => (ObservableCollection)GetValue(GlobalParamListCollectionProperty);
set => SetValue(GlobalParamListCollectionProperty, value);
}
private DelegateCommand _AddCommand;
public DelegateCommand AddCommand =>
_AddCommand ?? (_AddCommand = new DelegateCommand(ExecuteAddCommand));
private DelegateCommand _RemoveCommand;
public DelegateCommand RemoveCommand =>
_RemoveCommand ?? (_RemoveCommand = new DelegateCommand(ExecuteRemoveCommand));
void ExecuteRemoveCommand(ProductGlobalParam param)
{
GlobalParamListCollection.Remove(param);
for (int i = 0; i < GlobalParamListCollection.Count; i++)
{
GlobalParamListCollection[i].Number = i;
}
}
void ExecuteAddCommand()
{
GlobalParamListCollection.Add(new ProductGlobalParam() { Number= GlobalParamListCollection .Count});
}
#region 属性通知
///
/// Occurs when a property value changes.
///
public event PropertyChangedEventHandler PropertyChanged;
///
/// Checks if a property already matches a desired value. Sets the property and
/// notifies listeners only when necessary.
///
/// Type of the property.
/// Reference to a property with both getter and setter.
/// Desired value for the property.
/// Name of the property used to notify listeners. This
/// value is optional and can be provided automatically when invoked from compilers that
/// support CallerMemberName.
/// True if the value was changed, false if the existing value matched the
/// desired value.
protected virtual bool SetProperty(ref T storage, T value, [CallerMemberName] string propertyName = null)
{
if (EqualityComparer.Default.Equals(storage, value)) return false;
storage = value;
RaisePropertyChanged(propertyName);
return true;
}
///
/// Checks if a property already matches a desired value. Sets the property and
/// notifies listeners only when necessary.
///
/// Type of the property.
/// Reference to a property with both getter and setter.
/// Desired value for the property.
/// Name of the property used to notify listeners. This
/// value is optional and can be provided automatically when invoked from compilers that
/// support CallerMemberName.
/// Action that is called after the property value has been changed.
/// True if the value was changed, false if the existing value matched the
/// desired value.
protected virtual bool SetProperty(ref T storage, T value, Action onChanged, [CallerMemberName] string propertyName = null)
{
if (EqualityComparer.Default.Equals(storage, value)) return false;
storage = value;
onChanged?.Invoke();
RaisePropertyChanged(propertyName);
return true;
}
///
/// Raises this object's PropertyChanged event.
///
/// Name of the property used to notify listeners. This
/// value is optional and can be provided automatically when invoked from compilers
/// that support .
protected void RaisePropertyChanged([CallerMemberName] string propertyName = null)
{
OnPropertyChanged(new PropertyChangedEventArgs(propertyName));
}
///
/// Raises this object's PropertyChanged event.
///
/// The PropertyChangedEventArgs
protected virtual void OnPropertyChanged(PropertyChangedEventArgs args)
{
PropertyChanged?.Invoke(this, args);
}
#endregion
}
}