我在包含對象的WPF應用程序中有一個DataGrid
控件。該對象的布爾屬性可以通過用戶操作進行更改。當該屬性的值發生更改時,我需要該行的樣式進行更改。如何更改WPF DataGrid控件中該行中項目的屬性發生更改的行的樣式
我寫了下降的一類從StyleSelector
:
public class LiveModeSelector : StyleSelector {
public Style LiveModeStyle { get; set; }
public Style NormalStyle { get; set; }
public override Style SelectStyle(object item, DependencyObject container) {
DataGridRow gridRow = container as DataGridRow;
LPRCamera camera = item as LPRCamera;
if (camera != null && camera.IsInLiveMode) {
return LiveModeStyle;
}
return NormalStyle;
}
}
問題視圖模型類實現INotifyPropertyChanged
,並引發PropertyChanged
事件時,有關變化的特性。
// Note: The ModuleMonitor class implements INotifyPropertyChanged and raises the PropertyChanged
// event in the SetAndNotify generic method.
public class LPRCamera : ModuleMonitor, ICloneable {
. . .
public bool IsInLiveMode {
get { return iIsInLiveMode; }
private set { SetAndNotify("IsInLiveMode", ref iIsInLiveMode, value); }
}
private bool iIsInLiveMode;
. . .
/// </summary>
public void StartLiveMode() {
IsInLiveMode = true;
. . .
}
public void StopLiveMode() {
IsInLiveMode = false;
. . .
}
}
當用戶執行所需操作但該樣式不會更改時,該屬性的值會更改。
我已經在SelectStyle方法中放置了一個斷點,並且在控件第一次加載時看到了斷點,但是當屬性的值發生變化時它不會被觸發。
我錯過了什麼?
我正要編輯我的答案,根據你的評論提出這個建議,但我看到你已經爲自己想出了這個答案:) :) – Rachel
這個問題有一個有趣的小轉折。事實證明,當我第一次嘗試這個時,只有第一行第一列的顏色發生了變化。如果您將相機放在任何其他行中進入實時模式,則顏色不會改變。事實證明,我在我的app.xaml中爲'DataGridCell'類創建了一個樣式,並且正在改變'DataGridRow'類的顏色。我改變了app.xaml中的樣式,所以它適用於'DataGridRow'類並且一切正常。因此,本課將確保您始終處理同一類的樣式,最好是'DataGridRow'類! –