WPF网格更新问题
我正在向绑定到datagrid的数据源添加一个项,但UI没有更新以显示新项。这是我的密码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.
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();
}