2014-10-02 18 views
0

我正在一个WPF项目,我有一个DataGrid绑定到一个ObservableCollection。值正在被正确界定,但我遇到的问题是我无法编辑具有双值的列。它不会让我在细胞中插入一段时间。WPF:UpdateSourceTrigger = PropertyChanged问题与双值

这是我的XAML:

<DataGrid Name="dataGrid" AutoGenerateColumns="False" 
       CanUserResizeColumns="True" CanUserAddRows="False" CanUserSortColumns="True" ItemsSource="{Binding}" 
       HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch" 
       ColumnWidth="*" Margin="0,51,186,58" 
       RowEditEnding="dataGrid_RowEditEnding"> 
     <DataGrid.Columns> 
      <DataGridTextColumn Header="Field 1" Binding="{Binding Field1, UpdateSourceTrigger=PropertyChanged}" /> 
      <DataGridTextColumn Header="Field 2" Binding="{Binding Field2, UpdateSourceTrigger=PropertyChanged}" /> 
      <DataGridTextColumn Header="Field 3" Binding="{Binding Field3, UpdateSourceTrigger=PropertyChanged}" /> 
      <DataGridTextColumn Header="Field 4" Binding="{Binding Field4, UpdateSourceTrigger=PropertyChanged}" /> 
      <DataGridCheckBoxColumn Header="Field 5" Binding="{Binding Field5, UpdateSourceTrigger=PropertyChanged}" /> 
      <DataGridTextColumn Header="Field 6" Binding="{Binding Field6, UpdateSourceTrigger=PropertyChanged}" /> 
     </DataGrid.Columns> 

<DataGrid> 

这里是类(对不起,我奇怪的类属性:/我做它的目的是这样)

class FieldClass : INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 

    private int _field1; 
    public int Field1 
    { 
     get { return _field1; } 
     set 
     { 
      _field1 = value; 
      OnPropertyChanged("Field1"); 
     } 
    } 

    private int _field2; 
    public int Field2 
    { 
     get { return _field2; } 
     set 
     { 
      _field2 = value; 
      OnPropertyChanged("Field2"); 
     } 
    } 

    private double _field3; 
    public double Field3 
    { 
     get { return _field3; } 
     set 
     { 
      _field3 = value; 
      OnPropertyChanged("Field3"); 
     } 
    } 

    private double _field4; 
    public double Field4 
    { 
     get { return _field4; } 
     set 
     { 
      _field4 = value; 
      OnPropertyChanged("Field4"); 
     } 
    } 

    private bool _field5; 
    public bool Field5 
    { 
     get { return _field5; } 
     set 
     { 
      _field5 = value; 
      OnPropertyChanged("Field5"); 
     } 
    } 

    private double _field6; 
    public double Field6 
    { 
     get { return _field6; } 
     set 
     { 
      _field6 = value; 
      OnPropertyChanged("Field6"); 
     } 
    } 

    public FieldClass() 
    { 
     _field1 = 0; 
     _field2 = 0; 
     _field3 = 0.0; 
     _field4 = 0.0; 
     _field5 = false; 
     _field6 = 0.0; 
    } 

    // Create the OnPropertyChanged method to raise the event 
    protected void OnPropertyChanged(string name) 
    { 
     PropertyChangedEventHandler handler = PropertyChanged; 
     if (handler != null) 
     { 
      handler(this, new PropertyChangedEventArgs(name)); 
     } 
    } 
} 

如何如果我想更新列的值(可以说我想更新Field3或任何有双精度的字段),我可以在DataGrid上创建它,我可以插入一个类似2.1的double值吗?

是否需要数据模板?不知道如何去做,仍然是初学者。

感谢您的帮助!

+0

-1您的问题没有被您的代码展示。无论UpdateSourceTrigger值如何,我都可以输入带小数点的值而不会出现问题。 – Sheridan 2014-10-02 14:39:19

+0

对不起@Sheridan,我希望每个UpdateSourceTrigger都是“PropertyChanged”。出于测试目的,我将Field3设置为LostFocus。但它不是我想要做的。如果再将PropertyChanged添加到UpdateSourceTrigger中再次运行它,它不应该更新这次。 – 2014-10-02 14:50:14

+0

超前你的方式......我已经这么做了...这就是为什么我的评论说*无论UpdateSourceTrigger值如何。你必须有其他的东西干扰它。在一个新项目中尝试你的代码,你会发现它工作得很好。 – Sheridan 2014-10-02 15:06:14

回答

1

如果你真的想获得PropertyChanged触发器的行为,你可以尝试使用绑定的IsAsync = true,但我不确定这是正确的解决方案。

<DataGridTextColumn Header="Field 3" Binding="{Binding Field3, UpdateSourceTrigger=PropertyChanged, StringFormat=\{0:n\}, IsAsync=True}" />