2014-10-02 89 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}" />