0

我在 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 读取数据时,它仍然显示旧数据。当用户更改数据网格中的字段时,如何提交更改?

4

2 回答 2

1

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>

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

于 2020-05-19T15:07:29.713 回答
0

在类 Track 上实现 INotifyPropertyChanged。像那样

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"}
于 2020-05-19T09:24:03.287 回答