首页 > 解决方案 > WPF ObservableCollection 更新 DataGrid MVVM

问题描述

我试图ObservableCollection反映DataGrid. 我的问题是,DataGrid当我在集合中添加新元素时不显示更改,其中没有新行DataGrid。这ViewModel是绑定到 Window 的类

 public class MainWindowViewModel : INotifyPropertyChanged
{
    private ObservableCollection<Configuration> configuration;
    public MainWindowViewModel()
    {
        configuration = new ObservableCollection<Model.Configuration>();
    } 
public ObservableCollection<Configuration> Configuration { 
                get { return configuration; } 
                set { configuration = value; 
                      OnProperyChanged("Configuration"); 
                 }}
 #region INotifyPropertyChanged Members
    public event PropertyChangedEventHandler PropertyChanged;

    private void OnProperyChanged(string propertyChanged)
    {
        PropertyChangedEventHandler handler = PropertyChanged;

        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(propertyChanged));
        }
    }
    #endregion}

而我DataGrid的是

<DataGrid x:Name="maintable" IsReadOnly="True" ItemsSource="{Binding Configuration}" CanUserAddRows="False" AutoGenerateColumns="False" Height="180" Margin="10,61,391,0" VerticalAlignment="Top">
                    <DataGrid.Columns>
                        <DataGridTextColumn Header="ID" Binding="{Binding Id}"/>
                        <DataGridTextColumn Header="Name" Binding="{Binding Name}"/>
                        <DataGridTextColumn Header="Price" Binding="{Binding Price}"/>
                        <DataGridTextColumn Header="Description" Width="300"  Binding="{Binding Description}"/>

标签: c#wpfbindingobservablecollection

解决方案


由于某种原因DataGrid ItemsSource需要添加Mode=OneWay,现在 DataGrid 在 ObservableCollection 更改时正在更新

<DataGrid x:Name="maintable" IsReadOnly="True" ItemsSource="{Binding Configuration, Mode=OneWay}" CanUserAddRows="False" AutoGenerateColumns="False" Height="180" Margin="10,61,391,0" VerticalAlignment="Top">
                    <DataGrid.Columns>
                        <DataGridTextColumn Header="ID" Binding="{Binding Id}"/>
                        <DataGridTextColumn Header="Name" Binding="{Binding Name}"/>
                        <DataGridTextColumn Header="Price" Binding="{Binding Price}"/>
                        <DataGridTextColumn Header="Description" Width="300"  Binding="{Binding Description}"/>

推荐阅读