2017-02-22 15 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(); 

    } 
} 

Я пытался использовать интерфейс IncP, но он не хочет, чтобы заполнить таблицу с объектами.

+0

Пожалуйста, rpovide yout 'Truckinfo' класс. Возможно, ему нужно реализовать 'INotifyPropertyChanged'. –

+0

'Truckinfo' не реализует' INotifyPropertyChanged', это то, что вы говорите? * «он не хочет заполнять таблицу объектами» * может означать практически что угодно, так как я не могу угадать, что это означает «это», «таблица» или «объекты». Можете ли вы описать, какова была настоящая проблема? Вы были бы поражены тем, сколько вещей в этом мире можно описать словом «это». В основном все они. Так что трудно сузить. Я имею в виду, там очень много вещей, просто видно из моего стола. –

ответ

0

ObservableCollection обновляется только после изменения коллекции, а не при изменении элемента.

Вам необходимо будет установить TruckInfo для реализации INotifyPropertyChanged для отдельных изменений товара для автоматического изменения вида.

Кроме того, вы можете удалить элемент из коллекции, а затем снова вставить элемент. Затем вы инициируете событие смены коллекции, и представление будет обновляться в соответствии с последним содержимым коллекции.

+0

Спасибо, я воспользуюсь INotifyPropertyChanged. Я пробовал раньше, но это не заполняло мой список моим списком грузовых объектов. – Kennya42

+0

Это спрятанная добыча. Оба элемента и коллекции должны быть Observation/INotifyPropertyChanged, чтобы представление было полностью отзывчивым. –

Смежные вопросы