[英]How to detect if Combobox selection is changed by user
我有一個DataGridColumn,它有一個組合框CellTemplate:
<dxg:GridColumn.CellTemplate>
<DataTemplate>
<ComboBox Name="DataItems"
Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
DisplayMemberPath="Value"
ItemsSource="{Binding RowData.Row.DataDictionary}"
SelectedValue="{Binding RowData.Row.Data}"
SelectedValuePath="Key" />
</DataTemplate>
</dxg:GridColumn.CellTemplate>
我需要檢測用戶是否更改了組合框的初始值 。
如果使用SelectionChanged事件,則每次都會觸發(即使在創建時也是如此)。
該視圖是動態創建的,因此我不能真正使用bool值檢查它是剛剛創建還是已更改。
我應該使用什么事件或綁定來檢測用戶是否更改了選擇,而不發生了初始加載?
對我來說,我將使用OneWayToSource綁定。 通過將代碼置於句柄之后,您可能會知道:源由用戶或邏輯流程更改。
更改SelectedValue后將觸發SelectionChanged。 不在乎如何更新SelectedValue。 創建控件時,wpf通過從源代碼獲取操作來解析SelectedValue。 使用OneWayToSource綁定后,之后的代碼將不會更新SelectedValue。
在您的情況下,代碼應如下所示:
public event EventHandler SelectedChangedByUser;
public event EventHandler SelectedChangedByCode;
public object SelectedValue
{
get
{
return _selectedVaue;
}
set
{
if(value != _selectedValue)
{
_selectValue = value;
if(NotifyPropertyChanged != null)
{
NotifyPropertyChanged("SelectedValue");
}
if(SelectedChangedByUser != null)
{
SelectedChangedByUser(this, new EventArgs());
}
}
}
}
public void UpdateSelectedValue(object value)
{
if(value != _selectedValue)
{
_selectValue = value;
if(SelectedChangedByCode != null)
{
SelectedChangedByCode(this, new EventArgs());
}
}
}
對我來說,簡單的解決方案是使用PropertyChanged事件。
它具有2個優點:
這是代碼:
public DataItem FirstDataItem
{
get
{
return firstDataItem;
}
set
{
firstDataItem= value;
if (FirstDataItem!= null)
FirstDataItem.PropertyChanged += (x, y) =>
{
if (y.PropertyName =="Data" )
DoSomething();
};
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.