0

Ниже приведен код xaml и C# для обработки выбранных элементов в моем gridview.WinRT XAML Toolkit BindableSelections, не обновляющий UI

Я также использую MVVM Light, и все работает, включая меня, чтобы видеть, что внутри SelectedItems.

Однако, когда я пытаюсь очистить SelectedItems, мой пользовательский интерфейс, похоже, не обновляет/не отражает изменения, внесенные в SelectedItems.

Я использую WinRT XAML Toolkit (http://winrtxamltoolkit.codeplex.com/), который имеет расширение BindableSelection на GridView через

XAML

<controls:CustomGridView 
    x:Name="VideoItemGridView" 
    Grid.Row="2" 
    Margin="0,-3,0,0" 
    Padding="116,0,40,46" 
    HorizontalContentAlignment="Stretch" 
    VerticalContentAlignment="Stretch" 
    IsItemClickEnabled="True" 
    SelectionMode="Extended" 
    Extensions:GridViewExtensions.BindableSelection="{Binding SelectedVideoItems, Mode=TwoWay}" 
    ItemsSource="{Binding Source={StaticResource ViewSource}}" 
    ItemTemplate="{StaticResource VideoItemTemplate}"> 
    <GridView.ItemsPanel> 
     <ItemsPanelTemplate> 
      <VariableSizedWrapGrid ItemWidth="250" ItemHeight="160" /> 
     </ItemsPanelTemplate> 
    </GridView.ItemsPanel> 
</controls:CustomGridView> 

MyViewViewModel.cs

#region Selected Items 

/// <summary> 
/// Gets or sets the selected video items. 
/// </summary> 
public ObservableCollection<object> SelectedVideoItems 
{ 
    get { return this._selectedVideoItems; } 
    set 
    { 
     this._selectedVideoItems = value; 
     this.Set("SelectedVideoItems", ref this._selectedVideoItems, value); 
    } 
} 
private ObservableCollection<object> _selectedVideoItems = new ObservableCollection<object>(); 

#endregion 

#region App Bar Click Commands 

/// <summary> 
/// Gets the ClearSelection click command. 
/// </summary> 
public ICommand ClearSelectionClickCommand 
{ 
    get 
    { 
     return new RelayCommand(() => this.ClearSelectionOperation()); 
    } 
} 

/// <summary> 
/// Selects all command operation. 
/// </summary> 
private void ClearSelectionOperation() 
{ 
    this.SelectedVideoItems = new ObservableCollection<object>(); 
} 

#endregion 
+0

Вы используете текущую версию набора инструментов из исходного кода или пакета NuGet? Недавно были некоторые обновления (7 марта), которые еще не попали в новый пакет NuGet. –

ответ

0

Оказывается, что с тех пор я использую шаблон данных, это на самом деле моя модель данных, которая необходима, чтобы установить флаг, чтобы указать его выбран

Вот недостающий кусок головоломки. Как только я обновляю модель данных, привязанную к элементу представления сетки (который также включает поддержку для соединения строк/столбцов), пользовательский интерфейс обновляется, как ожидалось.

Надеюсь, это поможет другим.

public class CustomGridView : GridView 
{ 
    protected override void PrepareContainerForItemOverride(DependencyObject element, object item) 
    { 
     try 
     { 
      base.PrepareContainerForItemOverride(element, item); 

      dynamic _Item = item; 
      element.SetValue(VariableSizedWrapGrid.ColumnSpanProperty, _Item.ColumnSpan); 
      element.SetValue(VariableSizedWrapGrid.RowSpanProperty, _Item.RowSpan); 
      element.SetValue(GridViewItem.IsSelectedProperty, _Item.IsSelected); 
     } 
     catch 
     { 
      element.SetValue(VariableSizedWrapGrid.ColumnSpanProperty, 1); 
      element.SetValue(VariableSizedWrapGrid.RowSpanProperty, 1); 
      element.SetValue(GridViewItem.IsSelectedProperty, false); 
     } 
     finally 
     { 
      base.PrepareContainerForItemOverride(element, item); 
     } 
    } 
0

попробуйте очистить выбранные элементы в ClearSelectionOperation по телефону

this.SelectedVideoItems.Clear(); 

вместо

this.SelectedVideoItems = new ObservableCollection<object>(); 

Если это не поможет проверить если current version of the extension from March 7 исправляет эту проблему.