35752


ご教授よろしくお願いします｡

WPFのDataGridにObservableCollectionのインスタンスをバインドしております｡  
DataGrdiの値を変更したら､他の列の情報を自動で更新したいのですが､画面に反映されません｡｡(実際のインスタンスの値は変わっている)  
自動で画面更新されない理由と､更新する方法をご教授ください｡

xamlファイルは以下の通りです｡

[code]

    <DataGrid Name="gridTest" ItemsSource="{Binding}" AutoGenerateColumns="False" Margin="10" >
                <DataGrid.Columns>
                    <DataGridTextColumn Header="Value1"  Binding="{Binding Value1}" />
                    <DataGridTextColumn Header="Value2" Binding="{Binding Value2}" />
                    <DataGridTextColumn Header="Value3" Binding="{Binding Value3}"/>
                </DataGrid.Columns>
            </DataGrid>
[/code]

コードビハインドは以下の通りです｡

[code]

    public MainWindow()
            {
                InitializeComponent();
                ObservableCollection<Item> ItemList = new ObservableCollection<Item>();
                ItemList.Add(new Item() { Value1 = 1, Value2 = 4 });
                ItemList.Add(new Item() { Value1 = 2, Value2 = 4 });
                ItemList.Add(new Item() { Value1 = 3, Value2 = 6 });
    
                this.gridTest.DataContext = ItemList;
            }
            
            public class Item
        {
            int _value1;
            int _value2;
            int _value3;
    
            public int Value1
            {
                get
                {
                    return _value1;
                }
                set
                {
                    _value1 = value;
                }
            }
            public int Value2
            {
                get
                {
                    return _value2;
                }
                set
                {
                    _value2 = value;
                }
            }
            public int Value3
            {
                get
                {
                    _value3 = _value1 + _value2;
                    return _value3;
                }
                set
                {
                    _value3 = value;
                }
                
            }
        }
[/code]

ItemクラスのValue3はValue1+Value2を常に取得する想定です｡  
この時､画面上でGridViewのValue1を値変更してもValue3の値が更新されません｡  
ただし､バインディングされているインスタンスのValue3はValue1 + Value2になっています｡

試しにValue3のセルをダブルクリックして編集モードになると､Value1+Value2の値になります｡  
以下はその様子のサンプル画像です｡  
[![画像の説明をここに入力](https://i.stack.imgur.com/XFFgF.jpg)](https://i.stack.imgur.com/XFFgF.jpg)  
1行目ののValue1を1から10に変更した時にValue3が変わっていません｡  
ただし､Value3のセルをダブルクリックすると  
[![画像の説明をここに入力](https://i.stack.imgur.com/PiC75.jpg)](https://i.stack.imgur.com/PiC75.jpg)  
のように変わります｡｡｡

どなたか解決方法を教えてください｡


CC BY-SA 3.0
2017-06-20T11:16:22.907
35749
2017-06-21T02:06:15.777
2017-06-21T02:06:15.777
4840
12388
question
c# wpf xaml
GridViewのデータバインディングが反映されない


`Item`に`INotifyPropertyChanged`を実装してイベントを発生させてください。

[code]

    public class Item : INotifyPropertyChanged
    {
        int _value1;
        int _value2;
        int _value3;
    
        public event PropertyChangedEventHandler PropertyChanged;
    
        public int Value1
        {
            get
            {
                return _value1;
            }
            set
            {
                _value1 = value;
    
                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Value1)));
                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Value3)));
            }
        }
        public int Value2
        {
            get
            {
                return _value2;
            }
            set
            {
                _value2 = value;
                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Value2)));
                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Value3)));
            }
        }
        public int Value3
        {
            get
            {
                _value3 = _value1 + _value2;
                return _value3;
            }
            set
            {
                _value3 = value;
            }
        }
    }
    
[/code]

なお`_value3`フィールドと`Value3`のセッターはプロパティの値を変更しないので無意味です。


CC BY-SA 3.0
2017-06-20T12:04:43.287
35752
2017-06-20T12:10:39.433
2017-06-20T12:10:39.433
5750
5750
35749
answer