private void ObservableObject_PropertyChanged(object sender, PropertyChangedEventArgs e) { if (e.PropertyName == nameof(IsDirty)) { IsDirtyChanged?.Invoke(this, null); } }
private void toolStripMenuItem1_Click(object sender, EventArgs e) { dgv.Rows.Insert(_SelectedRowIndex, new DataGridViewRow()); _IsDirty = true; if (IsDirtyChanged != null) { IsDirtyChanged.Invoke(this, new EventArgs()); } }
void DebounceDirtyChanged(Action a) { bool d = IsDirty; a(); if (d != IsDirty) { IsDirtyChanged?.Invoke(this, EventArgs.Empty); } }
private void OnTextChanged(object sender, System.EventArgs e) { IsDirty = true; IsDirtyChanged?.Invoke(true); int newMaxRowCharLength = ScintillaEditor.Lines.Count.ToString().Length; if (_maxRowCharLength == newMaxRowCharLength) { return; } ScintillaEditor.Margins[0].Width = ScintillaEditor.TextWidth(ScintillaNET.Style.LineNumber, new string('9', newMaxRowCharLength + 1)); _maxRowCharLength = newMaxRowCharLength; }
private void dataGridViewX1_RowsRemoved(object sender, DataGridViewRowsRemovedEventArgs e) { List <DataGridViewRow> deletedList = new List <DataGridViewRow>(); foreach (DataGridViewRow row in _RowSubject.Keys) { if (!dgv.Rows.Contains(row)) { deletedList.Add(row); } } if (deletedList.Count > 0) { foreach (DataGridViewRow row in deletedList) { _RowSubject.Remove(row); } _RawDeleted = _IsDirty = true; if (IsDirtyChanged != null) { IsDirtyChanged.Invoke(this, new EventArgs()); } } }
public void OnIsDirtyChanged() { IsDirty = true; IsDirtyChanged?.Invoke(this); }
/// <summary> /// Invokes handlers of the <see cref="IsDirtyChanged"/> event. /// </summary> protected virtual void NotifyIsDirtyChanged() { IsDirtyChanged?.Invoke(this, EventArgs.Empty); }
private void dataGridViewX1_CellEndEdit(object sender, DataGridViewCellEventArgs e) { DataGridViewRow row = dgv.Rows[e.RowIndex]; #region 做IsDirty檢查 if (_defaultValues.ContainsKey(row.Cells[e.ColumnIndex]) && ("" + _defaultValues[row.Cells[e.ColumnIndex]]) != ("" + row.Cells[e.ColumnIndex].Value) //把值用都轉成字串來比對相等,用string+object相加來省去null.ToString()的麻煩 ) { _DirtyCells.Add(row.Cells[e.ColumnIndex]); } else { if (_DirtyCells.Contains(row.Cells[e.ColumnIndex])) { _DirtyCells.Remove(row.Cells[e.ColumnIndex]); } } if ((_DirtyCells.Count != 0) != _IsDirty) { _IsDirty |= (_DirtyCells.Count != 0); if (IsDirtyChanged != null) { IsDirtyChanged.Invoke(this, new EventArgs()); } } #endregion #region 判斷是否為科目名稱欄加入至集合中 if (e.ColumnIndex == _SubjectNameIndex) { if (!string.IsNullOrEmpty("" + row.Cells[_SubjectNameIndex].Value)) { if (_RowSubject.ContainsKey(row)) { _RowSubject[row] = row.Cells[_SubjectNameIndex].Value.ToString(); } else { _RowSubject.Add(row, row.Cells[_SubjectNameIndex].Value.ToString()); } } else if (_RowSubject.ContainsKey(row)) { _RowSubject.Remove(row); } } #endregion #region 檢查整個 Row 的欄位 row.Cells[_SubjectNameIndex].ErrorText = ""; if (!row.IsNewRow && string.IsNullOrEmpty("" + row.Cells[_SubjectNameIndex].Value)) { row.Cells[_SubjectNameIndex].ErrorText = "科目不能為空白"; } if (!row.IsNewRow && string.IsNullOrEmpty(row.Cells[_SubjectNameIndex].ErrorText)) { bool has_error = true; foreach (DataGridViewCell cell in row.Cells) { if (cell.ColumnIndex < _CreditStartIndex || cell.ColumnIndex >= _CreditStartIndex + 6) { continue; } if (!string.IsNullOrEmpty("" + cell.Value)) { has_error = false; break; } } if (has_error == true) { row.Cells[_SubjectNameIndex].ErrorText = "必需輸入節數/權數"; } } //if (!row.IsNewRow && string.IsNullOrEmpty("" + row.Cells[_DomainIndex].Value)) // row.Cells[_DomainIndex].ErrorText = "領域不能為空白"; //else // row.Cells[_DomainIndex].ErrorText = ""; #endregion //編輯最後一列(新增資料那列前依列) //if (e.RowIndex == dataGridViewX1.Rows.Count - 2) //{ // foreach (int index in new int[] { _CategoryIndex, _RequiredByIndex, _RequiredIndex, _EntryIndex }) // { // dataGridViewX1.Rows[e.RowIndex + 1].Cells[index].Value = dataGridViewX1.Rows[e.RowIndex].Cells[index].Value; // } //} }
/// <summary> /// Triggers the IsDirtyChanged event. /// </summary> public virtual void OnIsDirtyChanged() { IsDirtyChanged?.Invoke(this, EventArgs.Empty); }
// Methods private void OnIsDirtyChanged() { IsDirtyChanged?.Invoke(); }
private void RaiseDataChanged(string propertyName) { IsDirtyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); OnPropertyChanged(nameof(IsDirty)); }
private void dataGridViewX1_CellEndEdit(object sender, DataGridViewCellEventArgs e) { DataGridViewRow row = dataGridViewX1.Rows[e.RowIndex]; #region 做IsDirty檢查 if (_defaultValues.ContainsKey(row.Cells[e.ColumnIndex]) && ("" + _defaultValues[row.Cells[e.ColumnIndex]]) != ("" + row.Cells[e.ColumnIndex].Value) //把值用都轉成字串來比對相等,用string+object相加來省去null.ToString()的麻煩 ) { _DirtyCells.Add(row.Cells[e.ColumnIndex]); } else { if (_DirtyCells.Contains(row.Cells[e.ColumnIndex])) { _DirtyCells.Remove(row.Cells[e.ColumnIndex]); } } if ((_DirtyCells.Count != 0) != _IsDirty) { _IsDirty = (_DirtyCells.Count != 0); if (IsDirtyChanged != null) { IsDirtyChanged.Invoke(this, new EventArgs()); } } #endregion //判斷是否為科目名稱欄加入至集合中 #region 判斷是否為科目名稱欄加入至集合中 if (e.ColumnIndex == _SubjectNameIndex) { if (row.Cells[_SubjectNameIndex].Value != null && "" + row.Cells[_SubjectNameIndex].Value != "") { if (_RowSubject.ContainsKey(row)) { _RowSubject[row] = row.Cells[_SubjectNameIndex].Value.ToString(); } else { _RowSubject.Add(row, row.Cells[_SubjectNameIndex].Value.ToString()); } } else if (_RowSubject.ContainsKey(row)) { _RowSubject.Remove(row); } } #endregion //如果有填入科目名稱則開始計算級別 #region 如果有填入科目名稱則開始計算級別 if (_RowSubject.ContainsKey(row)) { string subjectName = _RowSubject[row]; int startLevel = 0; //如果有填數開始級別則以開始級別開始算 if (int.TryParse("" + row.Cells[_StartLevelIndex].Value, out startLevel)) { row.Cells[_SubjectNameIndex].Value = subjectName + " ( " + subjectName + " " + GetNumber(startLevel) + " ) "; } else { row.Cells[_SubjectNameIndex].Value = subjectName; } } #endregion //編輯最後一列(新增資料那列前依列) #region 編輯最後一列(新增資料那列前依列) if (e.RowIndex == dataGridViewX1.Rows.Count - 2) { foreach (int index in new int[] { _CategoryIndex, _RequiredByIndex, _RequiredIndex, _EntryIndex }) { dataGridViewX1.Rows[e.RowIndex + 1].Cells[index].Value = dataGridViewX1.Rows[e.RowIndex].Cells[index].Value; } } #endregion }
/// <summary> /// Notifies that IsDirty has changed. /// Should be called every time IsDirty chnages if ovveriding IsDirty /// </summary> protected void OnIsDirtyChanged() { IsDirtyChanged?.Invoke(this, new EventArgs()); }
public virtual void OnIsDirtyChanged() { IsDirtyChanged?.Invoke(this, EventArgs.Empty); OnPropertyChanged(nameof(IsDirty)); }
public void NotifyIsDirtyChanged(string propertyName) { IsDirtyChanged?.Invoke(this, new IsDirtyChangedEventArgs(propertyName)); }
public void SetContent(string text) { ScintillaEditor.Text = text; IsDirtyChanged?.Invoke(false); }
private void tabItem_InternalIsDirtyChanged(object sender, DependencyPropertyChangedEventArgs e) { IsDirtyChanged?.Invoke(this, e); }
private void dataGridViewX1_CellEndEdit(object sender, DataGridViewCellEventArgs e) { DataGridViewRow row = dataGridViewX1.Rows[e.RowIndex]; #region 做IsDirty檢查 if (_defaultValues.ContainsKey(row.Cells[e.ColumnIndex]) && ("" + _defaultValues[row.Cells[e.ColumnIndex]]) != ("" + row.Cells[e.ColumnIndex].Value) //把值用都轉成字串來比對相等,用string+object相加來省去null.ToString()的麻煩 ) { _DirtyCells.Add(row.Cells[e.ColumnIndex]); } else { if (_DirtyCells.Contains(row.Cells[e.ColumnIndex])) { _DirtyCells.Remove(row.Cells[e.ColumnIndex]); } } if ((_DirtyCells.Count != 0) != _IsDirty) { _IsDirty = (_DirtyCells.Count != 0); if (IsDirtyChanged != null) { IsDirtyChanged.Invoke(this, new EventArgs()); } } #endregion //判斷是否為科目名稱欄加入至集合中 #region 判斷是否為科目名稱欄加入至集合中 if (e.ColumnIndex == _SubjectNameIndex) { if (row.Cells[_SubjectNameIndex].Value != null && "" + row.Cells[_SubjectNameIndex].Value != "") { if (_RowSubject.ContainsKey(row)) { _RowSubject[row] = row.Cells[_SubjectNameIndex].Value.ToString(); } else { _RowSubject.Add(row, row.Cells[_SubjectNameIndex].Value.ToString()); } } else if (_RowSubject.ContainsKey(row)) { _RowSubject.Remove(row); } } #endregion //如果有填入科目名稱則開始計算級別 #region 如果有填入科目名稱則開始計算級別 if (_RowSubject.ContainsKey(row)) { string subjectName = _RowSubject[row]; List <int> levels = ProcessLevels(row); if (levels.Count > 1) { List <string> SubjectLevels = new List <string>(); int index = 0; if (levels[index] == 0) { index++; SubjectLevels.Add(" "); } for (int i = index; i < levels.Count; i++) { SubjectLevels.Add(GetNumber(levels[i])); } string levelstring = ""; foreach (string var in SubjectLevels) { levelstring += (levelstring == "" ? " (" : "、") + var; } row.Cells[_SubjectNameIndex].Value = subjectName + levelstring + ")"; } else { if (levels[0] > 0) { row.Cells[_SubjectNameIndex].Value = subjectName + " (" + GetNumber(levels[0]) + ")"; } else { row.Cells[_SubjectNameIndex].Value = subjectName; } } #region OldWay //int countLevel = 0; ////掃描開課學期 //for (int i = _CreditStartIndex; i < _CreditStartIndex+8; i++) //{ // if (row.Cells[i].Value != null) // { // //壘計課程級別 // countLevel++; // } //} //int startLevel = 0; ////如果有填數開始級別則以開始級別開始算 //if (row.Cells[_StartLevelIndex].Value != null) // int.TryParse("" + row.Cells[_StartLevelIndex].Value, out startLevel); ////計算科目級別 //if (countLevel > 1) //{ // #region 自動計算科目級別 // List<string> SubjectLevels = new List<string>(); // //如果開課超過一學期且沒有填入開始級別,開始級別從1開始 // if (startLevel == 0) // { // //沒填入開始級別則第一筆不加級別 // SubjectLevels.Add(" "); // startLevel = 1; // //填入開始級別第二筆開始會從2開始算級別 // for (int i = 1; i < countLevel; i++) // { // string levelNumber = ""; // levelNumber = GetNumber(i + startLevel); // SubjectLevels.Add(levelNumber); // } // } // else // { // //填入開始級別 // for (int i = 0; i < countLevel; i++) // { // string levelNumber = ""; // levelNumber = GetNumber(i + startLevel); // SubjectLevels.Add(levelNumber); // } // } // string levelstring = ""; // foreach (string var in SubjectLevels) // { // levelstring += (levelstring == "" ? " (" : "、") + var; // } // row.Cells[_SubjectNameIndex].Value = subjectName + levelstring + ")"; // #endregion //} //else //{ // //有填入開始級別,但沒有開課或只開課一學期 // if (startLevel > 0) // row.Cells[_SubjectNameIndex].Value = subjectName + " (" + GetNumber(startLevel) + ")"; // else // row.Cells[_SubjectNameIndex].Value = subjectName; //} #endregion } #endregion //編輯最後一列(新增資料那列前依列) if (e.RowIndex == dataGridViewX1.Rows.Count - 2) { foreach (int index in new int[] { _CategoryIndex, _RequiredByIndex, _RequiredIndex, _EntryIndex }) { dataGridViewX1.Rows[e.RowIndex + 1].Cells[index].Value = dataGridViewX1.Rows[e.RowIndex].Cells[index].Value; } } }