代码之家  ›  专栏  ›  技术社区  ›  prattom

在datagrid中编辑和保存数据

  •  0
  • prattom  · 技术社区  · 6 年前

    我在WPF应用程序中使用数据网格。以下是我的XAML代码

    <DataGrid x:Name="dgTest" HorizontalAlignment="Left" Height="296" Margin="184,115,0,0" VerticalAlignment="Top" Width="599" AutoGenerateColumns="False">
            <DataGrid.Columns>
                <DataGridTextColumn Header="Title" Width="60" Binding="{Binding title}" />
                <DataGridTextColumn Header="Artist" Width="*" Binding="{Binding artist}"/>
                <DataGridTextColumn Header="Value" Width="*" Binding="{Binding number}"/>
                <DataGridCheckBoxColumn Header="test" Width="*" Binding="{Binding test}"/>
            </DataGrid.Columns>
        </DataGrid>
    

    以下是我的C#代码

    public partial class MainWindow : Window
    {
        public ObservableCollection<Track> data = new ObservableCollection<Track>();
        public MainWindow()
        {
            InitializeComponent();
            data.Add(new Track() { title = "Think", artist = "Aretha Franklin", number = 7, test=true });
            data.Add(new Track() { title = "Minnie The Moocher", artist = "Cab Calloway", number = 9, test = true });
            data.Add(new Track() { title = "Shake A Tail Feather", artist = "Ray Charles", number = 4, test = true });
            dgTest.ItemsSource = data;
        }
    
    }
    public class Track
    {
        private String _t;
        private String _a;
        private int _n;
        private bool _fg;
        public String title
        {
            get { return _t; }
            set { _t = value; }
        }
        public String artist
        {
            get { return _a; }
            set { _a = value; }
        }
        public int number
        {
            get { return _n; }
            set { _n = value; }
        }
    
        public bool test
        {
            get { return _fg; }
            set { _fg = value;  }
        }
    }
    

    当我启动应用程序时,数据会被导入,但如果我在任何单元格中进行更改,这些更改都不会被提交,因为当我尝试从datagrid读取数据时,它仍然显示旧数据。当用户更改datagrid中的字段时,我如何提交更改?

    0 回复  |  直到 6 年前
        1
  •  1
  •   mm8    6 年前

    设置 UpdateSourceTrigger 绑定的属性 PropertyChanged :

    <DataGrid x:Name="dgTest" HorizontalAlignment="Left" Height="296" Margin="184,115,0,0" VerticalAlignment="Top" Width="599" AutoGenerateColumns="False">
        <DataGrid.Columns>
            <DataGridTextColumn Header="Title" Width="60" Binding="{Binding title, UpdateSourceTrigger=PropertyChanged}" />
            <DataGridTextColumn Header="Artist" Width="*" Binding="{Binding artist, UpdateSourceTrigger=PropertyChanged}"/>
            <DataGridTextColumn Header="Value" Width="*" Binding="{Binding number, UpdateSourceTrigger=PropertyChanged}"/>
            <DataGridCheckBoxColumn Header="test" Width="*" Binding="{Binding test, UpdateSourceTrigger=PropertyChanged}"/>
        </DataGrid.Columns>
    </DataGrid>
    

    这应该会导致立即设置源属性。

        2
  •  0
  •   NamNDT    6 年前

    在Track类上实现INNotifyProperty。就像那样

    public class Track : INotifyPropertyChanged 
    {
         public string title
         {
             get{return _t;}
             set
                {
                     _t = value;
                     OnPropertyChanged("title");
                }
         }
         public event PropertyChangedEventHandler PropertyChanged;
         public void OnPropertyChanged(string strCaller = null)
         {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(strCaller));
         }
    }
    

    在XAML代码中,您可以稍作修改:

    Binding="{Binding title, Mode="TwoWay", UpdateSourceTrigger="PropertyChanged"}