| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218 | using System;using System.Collections.Generic;using System.Linq;using System.Text;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 Aitex.Core.RT.Log;using System.Xml;using Aitex.Core.RT.ConfigCenter;using Aitex.Core.UI.View.Frame;namespace Aitex.Core.UI.View.Common{    /// <summary>    /// Interaction logic for ParameterView.xaml    /// </summary>    public partial class ParameterView : UserControl    {        bool _isLoaded;        ParameterViewModel _vm;        string _gridEditorOldValue;        bool _isGridModified;        public ParameterView()        {            InitializeComponent();            this.Loaded += new RoutedEventHandler(ParameterView_Loaded);        }        void ParameterView_Loaded(object sender, RoutedEventArgs e)        {            //set permission                this.IsEnabled = true;            this.Name = "Parameter";            Account.ViewPermission viewPermission;    // chaossong@add 20160414 for permission            if (ViewManager.LoginAccount != null)                viewPermission = ViewManager.LoginAccount.Permission[this.Name];            else                viewPermission = Account.ViewPermission.FullyControl;            switch (viewPermission)            {                 case Account.ViewPermission.FullyControl:                    btnResetParam.IsEnabled = true;                    btnSaveParam.IsEnabled = true;                    dataGrid1.IsEnabled = true;                    break;                default:                    btnResetParam.IsEnabled = false;                    btnSaveParam.IsEnabled = false;                    dataGrid1.IsEnabled = false;                    break;            }            if (_isLoaded)                return;            _vm = DataContext as ParameterViewModel;            if (_vm == null)                throw new ApplicationException("系统配置页面没有设置DataContext,需要在窗口创建之前,设置初始配置数据");            InitTree();            _isLoaded = true;        }        void InitTree()        {            treeView1.Items.Clear();            List<KeyValuePair<string, string>> lstSections = _vm.GetSectionList();            foreach (KeyValuePair<string, string> item in lstSections)            {                var fNode = new TreeViewFolderItem(item.Key);                fNode.Tag = item;                fNode.Selected += new RoutedEventHandler(sectionNode_Selected);                treeView1.Items.Add(fNode);            }        }        void sectionNode_Selected(object sender, RoutedEventArgs e)        {            var selectedNode = sender as TreeViewFolderItem;            if (selectedNode == null)                return;            if (_isGridModified)            {                if (MessageBox.Show("是否需要保存未存盘的参数?", "未保存", MessageBoxButton.YesNo) == MessageBoxResult.Yes)                {                    btnSaveParam_Click(null, null);                }                else                {                    _isGridModified = false;                }            }            KeyValuePair<string, string> keyPair = (KeyValuePair<string, string>)selectedNode.Tag;            labelTile.Content = keyPair.Key;            dataGrid1.Tag = keyPair.Value;            dataGrid1.ItemsSource = _vm.GetConfigEntries(keyPair.Value);                  }        private void GridEditor_LostFocus(object sender, RoutedEventArgs e)        {            TextBox tb = (sender as TextBox);            if (tb != null)                _isGridModified = tb.Text != _gridEditorOldValue;        }        private void GridEditor_GotFocus(object sender, RoutedEventArgs e)        {            TextBox tb = (sender as TextBox);            if (tb != null)                _gridEditorOldValue = tb.Text;        }        private void btnSaveParam_Click(object sender, RoutedEventArgs e)        {            _isGridModified = false;            string reason;            if (!VerifyInputData(out reason))            {                MessageBox.Show(reason, "Aitex", MessageBoxButton.OK, MessageBoxImage.Warning);                return;            }            string xpath = dataGrid1.Tag as string;            if (_vm.SaveConfigSection(xpath.Substring(xpath.IndexOf("'") + 1, xpath.LastIndexOf("'") - xpath.IndexOf("'")-1), dataGrid1.ItemsSource as List<ConfigEntry>))                MessageBox.Show("设定值保存成功!", "Aitex", MessageBoxButton.OK, MessageBoxImage.Information);            else                MessageBox.Show("设定值保存失败!", "Aitex", MessageBoxButton.OK, MessageBoxImage.Error);            btnResetParam_Click(null, null);        }        private void btnResetParam_Click(object sender, RoutedEventArgs e)        {            dataGrid1.ItemsSource = _vm.GetConfigEntries(dataGrid1.Tag as string);        }        private bool VerifyInputData(out string reason)        {            bool ret = true;            dataGrid1.CancelEdit();            var entryList = this.dataGrid1.ItemsSource.Cast<object>();            reason = string.Empty;            foreach (ConfigEntry entry in entryList)            {                try                {                    var inputText = entry.Value;                    var typeText = entry.Type;                    var minText = entry.RangeLowLimit;                    var maxText = entry.RangeUpLimit;                    if (string.IsNullOrEmpty(inputText))                        continue;                    if (String.Compare(typeText, "Int32", true) == 0)                    {                        int res = 0;                        if (!int.TryParse(inputText, out res))                            throw new Exception();                        int min = Convert.ToInt32(minText);                        int max = Convert.ToInt32(maxText);                        if (res < min || res > max)                        {                            ret = false;                            reason += string.Format("{0} 输入值错误!\n", entry.Description);                            var textBlock = dataGrid1.Columns[7].GetCellContent(entry) as System.Windows.Controls.TextBlock;                            if (textBlock != null)                                textBlock.Background = Brushes.Red;                        }                    }                    else if (String.Compare(typeText, "Double", true) == 0)                    {                        double res = 0;                        if (!double.TryParse(inputText, out res))                            throw new Exception();                        double min = Convert.ToDouble(minText);                        double max = Convert.ToDouble(maxText);                        if (res < min || res > max)                        {                            ret = false;                            reason += string.Format("{0} 输入值错误!\n", entry.Description);                            var textBlock = dataGrid1.Columns[7].GetCellContent(entry) as System.Windows.Controls.TextBlock;                            if (textBlock != null)                                textBlock.Background = Brushes.Red;                        }                    }                }                catch (Exception)                {                    reason += string.Format("{0} 输入值错误!\n", entry.Description);                    ret = false;                }            }            return ret;        }    }}
 |