WPF网格更新问题

WPF网格更新问题,wpf,wpfdatagrid,Wpf,Wpfdatagrid,我正在向绑定到datagrid的数据源添加一个项,但UI没有更新以显示新项。这是我的密码 DBContainer ctx = new DBContainer(); private void btnAddNewDesignator_Click(object sender, RoutedEventArgs e) { DESIGNATOR a = new DESIGNATOR(); a.DesignatorName = txtDesignator.

我正在向绑定到datagrid的数据源添加一个项,但UI没有更新以显示新项。这是我的密码

   DBContainer ctx = new DBContainer();
    private void btnAddNewDesignator_Click(object sender, RoutedEventArgs e)
    {
        DESIGNATOR a = new DESIGNATOR();
        a.DesignatorName = txtDesignator.Text;
        a.TXFreq = txtTX.Text;
        a.RXFreq = txtRX.Text;
        ctx.AddToDESIGNATORs(a);
        ctx.SaveChanges();

        dgDesignators.Items.Refresh(); 

    }
    private void btnAddNewDesignator_Loaded(object sender, RoutedEventArgs e)
    {
        dgDesignators.ItemsSource = ctx.DESIGNATORs;
    }
这是我的xaml:

<DataGrid AutoGenerateColumns="False" Height="225" HorizontalAlignment="Left" Margin="56,230,0,0" Name="dgDesignators" VerticalAlignment="Top" Width="602" CanUserAddRows="True" CanUserDeleteRows="True">
        <DataGrid.Columns>
            <DataGridTextColumn Header="Designator"   Binding="{Binding Path=DesignatorName,Mode=OneWay}" />
            <DataGridTextColumn Header="TX Frequency" Binding="{Binding Path=TXFreq,Mode=OneWay}" />
            <DataGridTextColumn Header="RX Frequency" Binding="{Binding Path=RXFreq,Mode=OneWay}" />
            <DataGridTextColumn Header="In Use" />
        </DataGrid.Columns>
    </DataGrid>

正如您所看到的,我正在刷新,我还尝试先将ItemSource设置为null,然后重新绑定它,但没有效果。感谢您的帮助。

按钮事件处理程序:

private void btnAddNewDesignator_Click(object sender, RoutedEventArgs e)
{
    DESIGNATOR a = new DESIGNATOR();
    a.DesignatorName = txtDesignator.Text;
    a.TXFreq = txtTX.Text;
    a.RXFreq = txtRX.Text;
    ctx.AddToDESIGNATORs(a);
    ctx.SaveChanges();

    designatorDataSource = ctx.DESIGNATOR.ToList();
}
项目资源属性:

private List<DESIGNATOR> _designatorDataSource = new List<DESIGNATOR>();
public List<DESIGNATOR designatorDataSource {
    get {
        return _designatorDataSource;
    }
    set {
        _designatorDataSource = value;
        OnPropertyChanged("designatorDataSource");
    }
}

我不建议在WPF中使用此类代码,尝试在MVVM模式中使用,它应该更容易实现,您需要做的就是创建一个类,作为DataGrid的DataContext,并使该类实现INotifyPropertyChange

我们可以看到您的xaml吗?您如何设置
数据源?您应该真正使用
属性
INotifyPropertyChanged
绑定,并使用dgDesignators.ItemsSource=ctx.DESIGNATORs;除非OnPropertyChanged意味着该类需要从INotifyPropertyChange派生,所以这必须放在新的数据上下文类中,对吗?
<DataGrid Name="dgDesignators" ItemsSource={Binding designatorDataSource, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}">
</DataGrid>
#region Property Change Event
/// <summary>
/// Occurs when a property is changed
/// </summary>
public event PropertyChangedEventHandler PropertyChanged;

/// <summary>
/// Raises the <see cref="PropertyChanged"/> for a given 
/// property.
/// </summary>
/// <param name="propertyName"></param>
protected void OnPropertyChanged(String propertyName) {
    // Get the handler
    PropertyChangedEventHandler handler = this.PropertyChanged;

    // Check that the event handler is not null
    if(null != handler) {
    // Fire the event
    handler(this, new PropertyChangedEventArgs(propertyName));
    }
}
#endregion
 DBContainer ctx = new DBContainer();
private void btnAddNewDesignator_Click(object sender, RoutedEventArgs e)
{
    DESIGNATOR a = new DESIGNATOR();
    a.DesignatorName = txtDesignator.Text;
    a.TXFreq = txtTX.Text;
    a.RXFreq = txtRX.Text;
    ctx.AddToDESIGNATORs(a);
    ctx.SaveChanges();

    dgDesignators.Items.Refresh(); 

}
private void btnAddNewDesignator_Loaded(object sender, RoutedEventArgs e)
{
    dgDesignators.ItemsSource = ctx.DESIGNATORs.ToList();
}