我在VB WPF應用程序中有一個可編輯的數據網格。 DataGrid本身的SourceUpdated屬性設置爲我的事件處理程序。網格中的2列是可編輯的,並且其綁定中的NotifyOnSourceUpdated標誌設置爲True。該事件正在正確觸發,但似乎無法找出確定發生了什麼變化的最佳方法。這兩列相互依賴,其中一個是物品數量,另一個是數量。如果用戶更改其中一個我想重新計算其他值並更新網格以及綁定源。我確信有很多方法可以解決這個問題,但我很好奇最好的方法。我可以監聽datagrid上的更改事件,查看更改內容,設置一些變量,然後使用SourceUpdated事件中的那些變量,但這看起來並不精美。有什麼建議麼?捕獲可編輯數據網格中更改的單元格
0
A
回答
1
我建議你走出事件處理程序的世界! WPF不鼓勵採用舊的WinForms方法來處理事件處理程序中的所有事情。
MVVM方式....
你必須利用你的模型類的功率在MVVM方式。綁定到數據網格的集合必須是一些項目的集合。如果你的數據網格顯示的是Employees
的列表,那麼你的收藏必須是一些IEnumerable<Employee>
...所以Employee
類可以幫助你在這裏。
假設您的數據網格顯示爲Gender
和Saluation
爲兩個相互關聯的可編輯列。所以你的Employee
類應該有以下東西在裏面...
1. `Employee` class must implement `INotifyPropertyChanged` interface.
2. `Gender` and `Salutation` properties must raise the `PropertyChanged` event from their property setters.
3. In the setter of `Gender` \ `Salutation` we must write the logic of changing the other field.
E.g.
private string _gender;
public string Gender
{
get
{
return _gender;
}
set
{
if (_gender != value)
{
_gender = value;
if (_gender == "Male")
{
Salutation = "Mr";
}
else if (_gender == "Female"
&& (Salutation == "Mr" || string.IsNullOrEmpty(Salutation)))
{
Salutation = "Ms";
}
else if (string.IsNullOrEmpty(_gender))
{
Salutation = string.Empty;
}
OnPropertyChanged("Gender");
}
}
}
private string _salutation;
public string Salutation
{
get
{
return _salutation;
}
set
{
if (_salutation != value)
{
_salutation = value;
if (_salutation == "Mrs" || _salutation == "Ms")
{
Gender = "Female";
}
else if (_salutation == "Mr")
{
Gender = "Male";
}
else if (string.IsNullOrEmpty(_salutation))
{
Gender = string.Empty;
}
OnPropertyChanged("Salutation");
}
}
}
哪裏OnPropertyChanged()
是...
public void OnPropertyChanged(string propertyName)
{
if (this.PropertyChanged != null)
{
this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
這樣你的圖形用戶界面將自動執行相關領域的轉換。
的ValueConverter方式...
如果你的字段沒有被存儲到模型中,但僅用於顯示目的,那麼你可以使用ValueConverter
....
public class GenderToSalutationConverter : IValueConverter
{
#region IValueConverter Members
public object Convert
(object value, Type targetType,
object parameter, System.Globalization.CultureInfo culture)
{
var _gender = (string) value;
if (_gender == "Male")
{
return "Mr";
}
else if (_gender == "Female")
{
return "Ms";
}
return string.Empty;
}
public object ConvertBack
(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
var _salutation = (string)value;
if (_salutation == "Mrs" || _salutation == "Ms")
{
return "Female";
}
else if (_salutation == "Mr")
{
return "Male";
}
return string.Empty;
}
#endregion
}
在XAML
<UserControl.Resources>
<local:GenderToSalutationConverter x:Key="GenderToSalutationConverter"/>
</UserControl.Resources>
<tk:DataGrid ItemsSource="{Binding Employees}">
<tk:DataGrid.Columns>
<tk:DataGridTextColumn
Header="Sex"
Binding="{Binding Gender,
Converter={StaticResource GenderToSalutationConverter}}">
</tk:DataGridTextColumn>
<tk:DataGridTextColumn
Header="Title"
Binding="{Binding Salutation}">
</tk:DataGridTextColumn>
</tk:DataGrid.Columns>
</tk:DataGrid>
希望這有助於...
+0
我已經*了大部分*已經存在(即,我的集合是一個ObservableCollection並且集合中的對象確實實現了INotifyPropertyChanged等)。我錯過了關於引發PropertyChanged事件的部分。現在它工作得很好。謝謝!! – BrianVPS 2012-03-12 16:08:57
相關問題
- 1. jqgrid:根據表單編輯中的單元格值將可編輯單元格更改爲不可編輯
- 2. 更改datagridview單元格中編輯的單元格
- 3. 如何捕獲Silverlight數據網格中的單元格內容?
- 4. 在單元格編輯後更改DataGridView中的數據源
- 5. 如何使單元格不可編輯基於gxt中可編輯網格中的另一個單元格值
- 6. WPF數據網格 - 按可編輯列編組的數據網格進行分組當可編輯單元格「打開」或編輯時,組中的行
- 7. WPF中的可編輯數據網格
- 8. 可編輯的數據網格?中繼?
- 9. 更改單擊編輯雙擊網格
- 10. 編輯時更改NSTableView單元格值
- 11. 角UI API網不捕獲最後一個單元格編輯
- 12. C#WPF工具包:如何讓數據網格中的單元格可編輯?
- 13. 使網格中的單元格不可編輯
- 14. 更改easyui數據網格中的單元格顏色
- 15. 更改單元格數據
- 16. ExtJS網格單元格編輯
- 17. 如何更改透視網格中編輯的單元格的顏色DevExpress
- 18. 編輯後更改slickgrid單元格數據
- 19. 使用按鈕編輯WPF數據網格單元格
- 20. 從表格單元格獲取已編輯的單元格值
- 21. 在Excel 2013中編輯單元格時更改日期格式
- 22. Extjs網格單元格編輯器跳過單元格
- 23. ReactJS可編輯表格單元格
- 24. 將可編輯數字單元格添加到單元格
- 25. DataTables:更改可編輯單元格的外觀
- 26. 在單元格編輯器中獲取extjs中的行數據
- 27. 可編輯的網格單元格文本未完全顯示?
- 28. J2ME - 具有可編輯單元格的動態表/網格。
- 29. 如何使表格單元格編輯的更改永久化?
- 30. 數據網格被編輯後會被捕獲
要求「最好」的方式導致主觀答案,並且在S.O.中一般不鼓勵。但我對你的問題的措辭感到困惑:你在尋找一種方法來確定哪個細胞觸發了變化事件? – kmote 2012-03-06 23:20:45
瞭解「最好」的擔憂......我的不好。但是,基本上,這就是我所要求的,但我認爲AngelWPF的答案將會滿足我的需求。我的datagrid綁定到一個ObservableCollection,但我仍然對這個東西不熟悉,並沒有考慮PropertyChanged事件。我會嘗試一下,看看它是如何發展的 – BrianVPS 2012-03-07 15:21:45