0

以下は、グリッドビューで選択したアイテムを処理するためのxamlおよびc#コードです。

私もMVVMLightを使用しており、SelectedItemsの内容を確認できるなど、すべてが機能しています。

ただし、SelectedItemsをクリアしようとすると、UIがSelectedItemsに加えられた変更を更新/反映していないようです。

GridViewにBindableSelection拡張機能があるWinRTXAMLToolkit (http://winrtxamltoolkit.codeplex.com/ )を使用しています

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
4

2 に答える 2

0

ClearSelectionOperation電話で選択したアイテムをクリアしてみてください

this.SelectedVideoItems.Clear();

それ以外の

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

それでも問題が解決しない場合は、3月7日以降の拡張機能の現在のバージョンで問題が解決するかどうかを確認してください。

于 2013-03-27T00:18:59.190 に答える
0

私はデータテンプレートを使用しているので、それが選択されていることを示すフラグを設定する必要があるのは実際には私のデータモデルであることがわかりました

これがパズルの欠けている部分です。グリッドビューアイテムにバインドされたデータモデル(行/列のスパニングのサポートも含まれます)を更新すると、UIが期待どおりに更新されました。

これが他の人に役立つことを願っています。

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);
        }
    }
于 2013-03-30T02:54:18.643 に答える