我在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. WPF數據網格 - 按可編輯列編組的數據網格進行分組當可編輯單元格「打開」或編輯時,組中的行
- 6. WPF中的可編輯數據網格
- 7. 可編輯的數據網格?中繼?
- 8. 編輯時更改NSTableView單元格值
- 9. C#WPF工具包:如何讓數據網格中的單元格可編輯?
- 10. 更改單元格數據
- 11. ExtJS網格單元格編輯
- 12. 使用按鈕編輯WPF數據網格單元格
- 13. 在Excel 2013中編輯單元格時更改日期格式
- 14. Extjs網格單元格編輯器跳過單元格
- 15. 將可編輯數字單元格添加到單元格
- 16. 在單元格編輯器中獲取extjs中的行數據
- 17. J2ME - 具有可編輯單元格的動態表/網格。
- 18. 如何使表格單元格編輯的更改永久化?
- 19. 編輯表格單元格
- 20. 如何從數據網格中的單元格獲取數據
- 21. Kendo UI更新網格編輯數據
- 22. 可編輯的HTML表格單元格編輯
- 23. Jsp可編輯數據網格
- 24. 如何在WPF中以實用的方式獲取數據網格的編輯單元格中的數據?
- 25. 編輯數據網格行
- 26. JTable單元格不反映更改,但可編輯
- 27. 如何使用MVVM處理數據網格單元格更改?
- 28. 動態更新數據網格中的單個單元格
- 29. 如何捕獲可編輯DataTable單元格上的單擊事件?
- 30. 如何突出顯示數據網格中已編輯的單元格
要求「最好」的方式導致主觀答案,並且在S.O.中一般不鼓勵。但我對你的問題的措辭感到困惑:你在尋找一種方法來確定哪個細胞觸發了變化事件? – kmote 2012-03-06 23:20:45
瞭解「最好」的擔憂......我的不好。但是,基本上,這就是我所要求的,但我認爲AngelWPF的答案將會滿足我的需求。我的datagrid綁定到一個ObservableCollection,但我仍然對這個東西不熟悉,並沒有考慮PropertyChanged事件。我會嘗試一下,看看它是如何發展的 – BrianVPS 2012-03-07 15:21:45