无法使用DataGridTemplateColumn

时间:2018-10-22 13:44:02

标签: c# wpf data-binding

我的ObservableCollection中的记录已正确加载到我的datagrid中,我能够编辑现有行,但不能插入新行。

我在DataGridTemplateColumn中使用View如下:

<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding ListRoundViewModel}" CanUserAddRows="True">
        <DataGrid.Columns>
            <DataGridTemplateColumn Header="Number">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBox Text="{Binding Path=Number, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
                <DataGridTemplateColumn.CellEditingTemplate>
                    <DataTemplate>
                        <TextBox Text="{Binding Path=Number, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellEditingTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>
    </DataGrid>

这是我的ViewModel

public class SettingsViewModel 
{       

    public ObservableCollection<Round> ListRoundViewModel { get; set; }

    public SettingsViewModel()
    {

        ListRoundViewModel = new ObservableCollection<Round>();
        ListRoundViewModel.Add(new Round(10));
        ListRoundViewModel.Add(new Round(5));
        ListRoundViewModel.Add(new Round(8));

    }
}

在加载视图时,我只需设置DataContext即可:

private void Settings_Loaded(object sender, RoutedEventArgs e)
{
    DataContext = new SettingsViewModel();
}

Model中使用的对象类型的ObservableCollection

public class Round : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    private int_number;


    public Round()
    {

    }

    public Round(int number)
    {
        this._number = number;
    }


    public int Number
    {
        get
        {
            return _number;
        }
        set
        {
            _number = value;
            OnPropertyChanged("Number");
        }
    }

    private void OnPropertyChanged(string propertyname)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyname));
    } 
}

另一方面,使用DataGridTextColumn(例如,后面),则完美插入行。

<DataGridTextColumn Header="Number" Binding="{Binding Path=Number, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>

运行App时,似乎没有在最后一行上触发Datagrid的BeginEdit事件。

我不知道我是否正确暴露了我的问题,但是DataGridTextColum类不适合我的UI需求,而DataGridTemplateColumn却适合。

0 个答案:

没有答案