0

データグリッドにバインドされているアイテムをデータソースに追加していますが、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 に設定してから再バインドしようとしましたが、役に立ちませんでした。ご協力いただきありがとうございます。

4

2 に答える 2

0

ボタン イベント ハンドラ:

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();
}

ItemsSourceProperty:

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

次に、DataGrid をバインドします。

<DataGrid Name="dgDesignators" ItemsSource={Binding designatorDataSource, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}">
</DataGrid>

編集: を追加INotifyPropertyChangedして、クラスを extend にしINotifyPropertyChangedます。

例: System.ComponentModel を使用します。パブリック クラス MyClass : Window、INotifyPropertyChanged

プロパティ変更イベントを追加する

#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
于 2013-09-09T19:07:10.097 に答える