2017-03-06 21 views
0

當我使用DataGrid的,因爲我需要添加新行的數據進行編輯,所以,我必須讓如何禁止WPF DataGrid的Click事件做一個新的行

CanUserAddRows="True" . 

,但我發現,當我點擊另一個單元格,dataGrid會建立一個新的Line,並且我不知道如何禁止這個事件。我發現因爲我綁定了「float」或「int」數據,單元格會填滿單元格「0」,我能做些什麼來讓它成爲沒有「0」的空間來充滿它。所以任何人都可以給我一些建議,謝謝。 enter image description here

+0

爲什麼你不能簡單地將CanUserAddRows屬性設置爲false,如果你想防止出現新行?或者你打算如何顯示添加行? – mm8

+0

因爲我需要添加新行,這個頁面是爲了添加新行而不顯示數據。所以我不能讓CanUserAddRows爲假 –

回答

0

您應該將DataGridTextColumn的綁定設置爲類型爲int?的屬性,而不是int。換句話說,考慮你有兩個屬性,類型爲int的一方和另一方INT模型的情況下?:

public class Model : INotifyPropertyChanged 
{ 
    int? _indexNullable; 
    public int? IndexNullable { get { return _indexNullable; } set { _indexNullable = value; RaisePropertyChanged("IndexNullable"); } } 

    int _index; 
    public int Index { get { return _index; } set { _index = value; RaisePropertyChanged("Index"); } } 

    public event PropertyChangedEventHandler PropertyChanged; 
    internal void RaisePropertyChanged(string propname) 
    { 
     PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propname)); 
    } 
} 

你可以看到下面的DataGrid中的區別:

<DataGrid ItemsSource="{Binding Models}" DataContext="{Binding}" AutoGenerateColumns="False"> 
    <DataGrid.Columns> 
     <DataGridTextColumn Binding="{Binding Index}"/> 
     <DataGridTextColumn Binding="{Binding IndexNullable}"/> 
    </DataGrid.Columns> 
</DataGrid> 
+0

同樣,如果你使用的是float,把它改爲可空:''float?'' – Ron

+0

我非常感謝你的詳細program.but我不熟悉MVVM,我只是使用簡單的職員類,'公衆班員工 { public int ID {get;組; } public string Name {get;組; } public float Test_Score {get;組; } public float [] G = new float [100]; }',並使用observableCollection ,因此,對我做出大變動有點困難。 –

+0

和我只是改變我的程序,就像'公衆流動? Test_Score {get;組; }',程序會報錯 –