2

私はListView場所を持っています:

public class RowData
{
    public string Box1 { get; set; }
    public string Box2 { get; set; }
    public string Box3 { get; set; }
};

private ObservableCollection<RowData> Data = new ObservableCollection<RowData>();

...

MyListView.ItemsSource = Data;

RowDataDisplayMemberBindingプロパティを列のプロパティにバインドしました。次に例を示します。

MyGridViewColumn.DisplayMemberBinding = new Binding("Box1"));

私はイベントを処理しListViewItem.DoubleClickます:

private void ListViewItem_DoubleClick(object sender, MouseButtonEventArgs e)
{
    ListViewItem item = sender as ListViewItem;
    RowData data = item.DataContext as RowData;
    data.Box1 = "new string";
}

Box1しかし、新しい文字列をデータに割り当てると、ListView はその項目を更新しません (新しい値がある場合でも、古い値を見ることができBox1ます - 新しい文字列を割り当てる前に、新しいダブルクリックが表示されBox1 == "new string"ます)。
なんで?どうすればこの問題を解決できますか?

4

1 に答える 1

4

インターフェイスの実装を忘れていましたINotifyPropertyChanged

データ クラスのプロパティを更新した後、View 自体を更新するように通知する必要があります。

public class RowData : INotifyPropertyChanged
{
    private string box1;
    public string Box1 
    {
        get { return box1; }
        set
        {
            if(box1 == value) return;
            box1= value;
            NotifyPropertyChanged("Box1 ");
        }
    }
 //repete the same to Box2 and Box3

 public event PropertyChangedEventHandler PropertyChanged;

 private void NotifyPropertyChanged(String propertyName)
 {
     if (PropertyChanged != null)
     {
         PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
     }
 }
 }
于 2012-09-29T16:10:13.847 に答える