【问题标题】:How to keep my selection to the DataGrid Row after refresh the data grid using timer in WPF使用 WPF 中的计时器刷新数据网格后如何将我的选择保留到 DataGrid Row
【发布时间】:2013-07-23 10:03:05
【问题描述】:

我有 WPF DataGrid,我正在绑定 DataGrid,但如果对 Data 进行任何更改,它将自动刷新,但我对 datagrid 行的选择将取消选择。

【问题讨论】:

    标签: c# wpf wpfdatagrid


    【解决方案1】:

    不要使用List 来存储数据,而是尝试使用ObservableCollection。使用ObservableCollection 的优势在于,每当您向集合中添加项目时,UI 都会自动更新,因此不需要手动刷新DataGrid。下面我分享了一个在DataGrid中添加和更新记录的示例应用程序。

    XAML:

    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>
        <StackPanel Orientation="Horizontal">
            <RadioButton Name="CBAdd" GroupName="AddOrEdit" Content="Add Messages" IsChecked="True"></RadioButton>
            <RadioButton Name="CBUpdate" GroupName="AddOrEdit" Content="Update Messages"></RadioButton>
        </StackPanel>
        <DataGrid Grid.Row="1" Name="DGNew" CanUserAddRows="False">
    
        </DataGrid>
    </Grid>
    

    代码背后:

    using System;
    using System.Windows;
    using System.Timers;
    using System.Collections.ObjectModel;
    using System.Windows.Threading;
    using System.ComponentModel;
    
    namespace WpfApplication1
    {
        /// <summary>
        /// Interaction logic for MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window
        {
            Timer _timer = null;
            ObservableCollection<CustomMessage> _messages = null;
    
            int count = 0;
    
            public MainWindow()
            {
                InitializeComponent();
                _messages = new ObservableCollection<CustomMessage>();
                count++;
                _messages.Add(new CustomMessage() { ID = count, Message = "Message" });
                _timer = new Timer(1000);
                _timer.Elapsed += new ElapsedEventHandler(_timer_Elapsed);
    
                this.DGNew.ItemsSource = _messages;
                _timer.Start();
            }
    
            void _timer_Elapsed(object sender, ElapsedEventArgs e)
            {
                try
                {
                    _timer.Stop();
                    Application.Current.Dispatcher.Invoke(DispatcherPriority.Background, new Action(() =>
                    {
                        if (this.CBAdd.IsChecked == true)
                        {
                            count++;
                            _messages.Add(new CustomMessage() { ID = count, Message = "Timer Message " + count });
                        }
                        else
                        {
                            // Udpate existing Message
                            Random random = new Random();
                            CustomMessage message = _messages[random.Next(0, count)];
                            message.Message = "Updated Time" + DateTime.Now.ToLongTimeString();
                        }
                    }));
                }
                finally
                {
                    _timer.Start();
                }
            }
        }
    
        public class CustomMessage : INotifyPropertyChanged
        {
            private int _ID;
    
            public int ID
            {
                get { return _ID; }
                set
                {
                    _ID = value;
                    OnPropertyChanged("ID");
                }
            }
    
            private string _Message;
    
            public string Message
            {
                get { return _Message; }
                set
                {
                    _Message = value;
                    OnPropertyChanged("Message");
                }
            }
    
            public event PropertyChangedEventHandler PropertyChanged;
            public void OnPropertyChanged(string propertyName)
            {
                if (PropertyChanged != null)
                    PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-28
      • 2020-08-14
      • 1970-01-01
      • 1970-01-01
      • 2012-10-06
      • 1970-01-01
      • 2019-03-18
      • 2012-05-30
      相关资源
      最近更新 更多