当前位置:网站首页>wpf dataGrid 实现单行某个数据变化 ui 界面随之响应

wpf dataGrid 实现单行某个数据变化 ui 界面随之响应

2022-07-07 12:10:00 孔雀东南飞-深圳

背景介绍:

一行数据 比如 有 姓名 年龄 id 号 当 id 变化 更新 id 当 年龄变化 更新年龄 以 id 作为编号 如果 id 变化了则新增 否则更改

1 封装 NotifyObject 类

public class NotifyObject : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

        //----------------------------激发事件

        public void OnPropertyChanged(string val)
        {
            PropertyChangedEventHandler handler = PropertyChanged;

            if(handler != null)
            {
                handler(this, new PropertyChangedEventArgs(val));
            }
        }
    }

2 封装 model 类

public class Tags_Model : NotifyObject
    {
        public Tags_Model()
        {
            Clear();
        }

        public void Clear()
        {
            id = string.empty;
            name = string.Empty;
            age = string.Empty;
        }

        int id;
        public int ID
        {
            get { return id; }
            set
            {
                id = value;
                OnPropertyChanged("ID");

            }
        }
        string name;
        public string Name
        {
            get { return name; }
            set
            {
                name = value;
                OnPropertyChanged("Name");
            }
        }

        public string age;
        public string Age
        {
            get
            {
                return age;
            }

            set
            {
                age = value;
                OnPropertyChanged("Age");
            }
        }
    }

3  封装 接口类 ITest

public abstract class ITest : NotifyObject
    {
        protected ObservableCollection<Tags_Model> _orderItemList = null;

        public void Add(Tags_Model model)
        {
            if (model != null)
            {
                System.Windows.Application.Current.Dispatcher.Invoke(new Action(() =>
                {
                    _orderItemList.Add(model);
                }));
            }
        }

        public ObservableCollection<Tags_Model> OrderItemList
        {
            get { return _orderItemList; }
            set { _orderItemList = value; OnPropertyChanged("OrderItemList"); }
        }
    }

4 定义子类

public class Test : ITest
    {
        public Test()
        {
            if(_orderItemList == null)
            {
                _orderItemList = new ObservableCollection<Tags_Model>();
            }
        }
    }

5 定义 viewModel 类

 public class vm_Test : NotifyObject
    {
        private Test ieas = null;

        public vm_Test()
        {
            if ( ieas == null ) { ieas = new Test(); }
        }


        public Test Test
        {
            get { return ieas; }
            set { ieas = value; OnPropertyChanged("Test"); }
        }
    }

6 xaml

<Grid>
        <DataGrid 
            x:Name="dataGrid" 
            HorizontalAlignment="Left" 
            Height="355" 
            Margin="10,55,0,0" 
            AutoGenerateColumns="False"
            IsReadOnly="True"
            Width="774"
            FontFamily="微软雅黑"
            FontSize="20"
            ItemsSource ="{Binding Test.OrderItemList}"
            >
            <DataGrid.Columns>
                
                <DataGridTemplateColumn Width="80" 
                                        Header="id">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock 
                                x:Name="txtID"
                                Text="{Binding ID}"
                                VerticalAlignment="Center"
                                HorizontalAlignment="Center"/>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
                
                <DataGridTemplateColumn Width="80" 
                                        Header="name">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock 
                                x:Name="txtID"
                                Text="{Binding Name}"
                                VerticalAlignment="Center"
                                HorizontalAlignment="Center"/>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>

                <DataGridTemplateColumn Width="80" 
                                        Header="age">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock 
                                x:Name="txtID"
                                Text="{Binding Age}"
                                VerticalAlignment="Center"
                                HorizontalAlignment="Center"/>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>

            </DataGrid.Columns>
        </DataGrid>

    </Grid>

6 主页面

public vm_Test _view = null;

Dictionary<string, Tags_Model> dic = null;

public MainWindow()
        {
            InitializeComponent();

            if ( _view == null ) { _view = new vm_Test(); }

            if(dic == null)
            {
                dic = new Dictionary<string, Tags_Model>();
            }

            if ( _view != null )
            {
                this.DataContext = _view;
            }

            if ( _view != null && _view.Test != null )
            {
                Tags_Model t = new Tags_Model()
                {
                    ID = 1,
                };
                _view.Test.Add(t);

                t.age = "dkladjla";
                dic.Add(t.ID.ToString(), t);

                t.name = "dkaldkaldd";
            }
}

 

原网站

版权声明
本文为[孔雀东南飞-深圳]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_44957370/article/details/125148576