2017-02-22 23 views
0

リストビューに表示されているオブジェクトのリストがあり、別のチェックボックスをオンにしたときにそのオブジェクトの値を更新したい。私はその値を表示するテキストボックスがこの新しい値で更新されるようにします。 現在、オブジェクトを取得して別の値を保持していますが、新しい値を表示することはできません。MVVM:リストビュー内でバインド値が更新されない

<ListView Margin="0,5,5,5" Name="TruckModels" DockPanel.Dock="Top" Height="400" Width="1310" ItemsSource="{Binding ListOfTrucks}" HorizontalAlignment="Right"> 
     <ListView.View> 
      <GridView> 
       <!--New Version column--> 
       <GridViewColumn Header="New Version" Width="105"> 
        <GridViewColumn.CellTemplate> 
         <DataTemplate> 
          <StackPanel Orientation="Vertical"> 
           <TextBox AcceptsReturn="True" Height="Auto" Width="80" IsReadOnly="False" 
            x:Name="CurrentVersionTB" TextAlignment="Left" TextWrapping="Wrap" 
            VerticalScrollBarVisibility="Auto" 
            Text="{Binding NewVersionVal}" 
            Foreground="#FFCD0000" 
            DataContextChanged="CurrentVersionTB_DataContextChanged"/> 
          </StackPanel> 
         </DataTemplate> 
        </GridViewColumn.CellTemplate> 
       </GridViewColumn> 
       <!--Auto-Increment Version? column--> 
       <GridViewColumn Header="Auto-Increment&#10; Version?" Width="105"> 
        <GridViewColumn.CellTemplate> 
         <DataTemplate> 
          <StackPanel Orientation="Vertical"> 
            <CheckBox IsChecked="{Binding IsSelectedAINV}" Checked="AutoIncrement_Checked" /> 
          </StackPanel> 
         </DataTemplate> 
        </GridViewColumn.CellTemplate> 
       </GridViewColumn> 
       </GridView> 
     </ListView.View> 
    </ListView> 

CSコード:

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
     //List<Truckinfo> items = new List<Truckinfo>(); 
     ObservableCollection<Truckinfo> items = new ObservableCollection<Truckinfo>(); 

     xmlparsing(items); 
     TruckModels.ItemsSource = items; 
    } 
    private void ScrollViewer_MouseWheel(object sender, MouseWheelEventArgs e) 
    { 
     ScrollViewer scrollviewer = sender as ScrollViewer; 
     if (e.Delta > 0) 
     { 
      scrollviewer.LineUp(); 
     } 
     else 
     { 
      scrollviewer.LineDown(); 
     } 
     e.Handled = true; 
    } 
    private void AutoIncrement_Checked(object sender, RoutedEventArgs e) 
    { 
     Truckinfo item = (Truckinfo)(sender as CheckBox).DataContext; 
     int i; 
     int.TryParse(item.NewVersionVal, out i); 
     i++; 
     item.NewVersionVal = i.ToString(); 
     Debug.WriteLine(item.NewVersionVal); 
     e.Handled = true; 
    } 

    private void CurrentVersionTB_DataContextChanged(object sender, DependencyPropertyChangedEventArgs e) 
    { 
     TextBox t = sender as TextBox; 
     t.BindingGroup.UpdateSources(); 

    } 
} 

私は、統合ネットワーク制御システムのインタフェースを使用しようとしましたが、それはオブジェクトとテーブルを移入する必要はありません。

+0

あなたはTruckinfoクラスをご利用ください。おそらく 'INotifyPropertyChanged'を実装する必要があります。 –

+0

'Truckinfo'は' INotifyPropertyChanged'を実装していません、それはあなたが言っていることですか? *「それはテーブルをオブジェクトで埋めることを望んでいない」*「それ」、「テーブル」、または「オブジェクト」が参照するものを推測する方法がないため、事実上何かを意味する可能性があります。実際の問題が何だったのか説明できますか?あなたは、この世界のどのくらいのものが "それ"という言葉で記述できるかに驚かれるでしょう。基本的にそれらのすべて。狭くするのは難しいです。私の机から見えて、そこにはたくさんのものがあります。 –

答えて

0

ObservableCollectionは、アイテムが変更されたときではなく、コレクションが変更されたときにのみ更新されます。

ビューを自動的に更新するには、TruckInfoに個々のアイテムの変更を実装するINotifyPropertyChangedが必要です。

また、アイテムをコレクションから削除して、アイテムを再度挿入することもできます。その後、コレクションの変更イベントがトリガーされ、最新のコレクションの内容と一致するようにビューが更新されます。

+0

ありがとう私はINotifyPropertyChangedを実装します。私は前に試しましたが、私のリストビューにトラックオブジェクトのリストを入力していませんでした。 – Kennya42

+0

これは隠された邪魔です。ビューが完全に応答するには、アイテムとコレクションの両方をObservation/INotifyPropertyChangedにする必要があります。 –

関連する問題