私はVB WPFアプリケーションで編集可能なDataGridを持っています。 DataGrid自体のSourceUpdatedプロパティは、自分のイベントハンドラに設定されています。グリッド内の列の2つは編集可能であり、BindingのNotifyOnSourceUpdatedフラグがTrueに設定されています。このイベントは適切に発射されていますが、何が変わったのかを判断する最良の方法はわからないようです。 2つの列は、一方が項目数量であり、他方が大文字小文字数量であるという点で、互いに依存します。ユーザーがそれらのいずれかを変更した場合は、もう一方の値を再計算し、グリッドとバインディングソースを更新します。これを処理するにはいくつかの方法があると確信していますが、何が最良の方法であるか不思議です。私は、データグリッド上の変更イベントを聞くことができ、何が変更されたかを見て、いくつかの変数を設定してから、それらをSourceUpdatedイベントで使用することができます。助言がありますか?編集可能なデータグリッドでどのセルが変更されたのをキャッチ
答えて
イベントハンドラーの世界から出てくることをお勧めします。 WPFは、イベントハンドラですべてを行う古いWinFormsアプローチを採用することを躊躇しています。
MVVM方法....
あなたはMVVMの方法であなたのモデルクラスのパワーを活用しなければなりません。あなたのDataGridへのバインドされたコレクションは、いくつかのアイテムのコレクションでなければなりません。あなたがDataGridにEmployees
のリストを表示している場合、あなたのコレクションはある程度IEnumerable<Employee>
でなければなりません。だからEmployee
クラスがあなたを助けます。
データグリッドが、相互に関連する2つの編集可能な列として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.
例えば...それで物事以下が必要ですOnPropertyChanged()
あなたのGUIが自動的に関連する分野の変換を実行します。この方法で...
public void OnPropertyChanged(string propertyName)
{
if (this.PropertyChanged != null)
{
this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
ある
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");
}
}
}
。あなたのフィールドがモデルに保存されたが、表示目的のためにのみあることをされていない場合は
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>
・ホープ、このことができますが...
私はこの場所の大部分をすでに持っていた(つまり、私のコレクションはObservableCollectionであり、コレクション内のオブジェクトはINotifyPropertyChangedなどを実装していた)。私は、PropertyChangedイベントを発生させることについて、その部分を欠いていました。今はうまくいっています。ありがとう!! – BrianVPS
- 1. 編集時にサイズ変更されない編集可能なHTML表セル
- 2. ReactJS編集可能な表のセル
- 3. Flex:CFCで編集可能なデータグリッドを保存
- 4. デバッグ中に編集不可能なソースファイルとショートカットが変更されました
- 5. データグリッドビューセルの編集されたセルの変更
- 6. jqgrid:編集可能なセルをフォーム編集のセル値に従って編集できないように変更する
- 7. 編集可能な表のセルにドロップダウンリストが表示されない
- 8. セル/範囲編集可能フォーカスのスクリプトテスト
- 9. X編集可能な単純なデータベースの更新が更新されない
- 10. 複数行の編集可能なテキスト:編集可能なUILabel?
- 11. slickgridの編集可能な行と編集不可能な行
- 12. Javascript:セルを編集可能にする
- 13. Dreamweaverテンプレートで編集可能なリージョンを編集不可能なリージョンに変更する方法
- 14. 編集中のデータグリッドのテキストボックスの幅を変更し、データグリッドのセル幅を修正します。
- 15. Xceed DataGridControlのワンクリックで編集可能なバインドされたCheckBox
- 16. 編集可能なコンボボックス(WPF)のコンテキストメニューを変更する
- 17. 編集可能なComboBoxの動作を変更します
- 18. Androidスタジオで編集不可能なクラスを変更する
- 19. XULテキストボックスが編集可能または表示されない
- 20. QtableView内の編集不可能なセルの上のタブ
- 21. 角の編集可能なドロップダウン - 選択された値に基づいて編集可能にする
- 22. 展開されたASP.Netサイトの編集可能なリソースファイル
- 23. 編集可能なフィールドが編集されているか確認するjqgrid
- 24. 編集可能なセルにカーソルがあるのはなぜですか?
- 25. 動的テーブル内の編集可能なセル
- 26. 編集可能な編集モードセルの外側にセルのボタンを表示させる
- 27. 編集テキストの変数が変更されました
- 28. AgularJS IEの編集可能なuiグリッド入力セルの高さの問題
- 29. 編集/追加/編集をするためにどのようにデータグリッド
- 30. 編集可能なajaxセルを作成するには?
「最良の」方法を求めると主観的な答えが得られますが、一般的にS.O.では推奨されません。しかし、私はあなたの質問の文言に混乱しています:どのセルが変更イベントを引き起こしたかを判断する方法を探していますか? – kmote
"最高の"懸念を理解...私の悪い。しかし、はい、基本的に、私が求めていたことですが、私はAngelWPFの答えが私の必要とすることをすると思います。私のDataGridはObservableCollectionにバインドされていますが、私はまだこのようなものには新しく、PropertyChangedイベントについては考えていません。私はそれを試して、それがどうなるかを見てみよう。 – BrianVPS