1

メトロ アプリで GUI を更新するために、グリッド ビュー アイテムが選択されたときにボタンを有効にしたいと考えています。ボタンもリスト ビュー アイテムとして含まれています。以下は、私がやりたいことのコードスニペットです。助けてください。

<GridView Name="searchPanelGrid"  SelectionMode="Single" 
                                HorizontalAlignment="Left"
                                ScrollViewer.IsHorizontalScrollChainingEnabled="True"
                                ScrollViewer.IsVerticalScrollChainingEnabled ="True"
                                ScrollViewer.HorizontalScrollBarVisibility="Auto"
                                ScrollViewer.VerticalScrollBarVisibility="Auto"
                                ScrollViewer.HorizontalScrollMode="Enabled"
                                ScrollViewer.VerticalScrollMode="Enabled"
                                ItemsSource="{Binding Source={StaticResource CollectionItems}}" Grid.Row="2">
        <GridView.ItemsPanel>
            <ItemsPanelTemplate>
                <WrapGrid Orientation="Horizontal" />
            </ItemsPanelTemplate>
        </GridView.ItemsPanel>
        <GridView.ItemTemplate>
            <DataTemplate>
                <Grid Margin="6" Height="175" Width="150" Background="#FFFAFAFA">
                    <Grid.RowDefinitions>
                        <RowDefinition Height="85"/>
                        <RowDefinition Height="50"/>
                        <RowDefinition Height="30"/>
                    </Grid.RowDefinitions>
                    <StackPanel Background="#FF0A56BF" Width="150" Height="85" Grid.Row="0">
                        <Image Source="{Binding Path=ThumnailUrl}" Stretch="UniformToFill" HorizontalAlignment="Left" VerticalAlignment="Top"/>
                    </StackPanel>
                    <TextBlock Text="{Binding Path=VideoName}" TextWrapping="Wrap" Foreground="#FF017DD5" Grid.Row="1" HorizontalAlignment="Left" VerticalAlignment="Top" Height="Auto" FontSize="12"/>
                    <Button x:Name="downloadButton" Grid.Row="3" Content="Download Video" HorizontalAlignment="Left" VerticalAlignment="Bottom" Style="{StaticResource DownloadButtonStyle}" Click="downloadButton_Click" IsEnabled="{Binding}" />
                </Grid>
            </DataTemplate>
        </GridView.ItemTemplate>
    </GridView>

ボタン プロパティ IsEnabled をバインドできません。これを行う方法について何か提案はありますか??

4

1 に答える 1

2

collectionitems がバインドされるクラスでプロパティを宣言し、そのプロパティをボタンの isenabled プロパティにバインドしてから、SelectionChangeEvent でグリッド ビューの選択したアイテムを取得し、ボタンの isenabled プロパティの値を true に設定することで、これを解決しました。その作業。

Xaml ファイル SearchPanel.xaml

<GridView Name="searchPanelGrid"  SelectionMode="Single" 
                                HorizontalAlignment="Left"
                                ScrollViewer.IsHorizontalScrollChainingEnabled="True"
                                ScrollViewer.IsVerticalScrollChainingEnabled ="True"
                                ScrollViewer.HorizontalScrollBarVisibility="Auto"
                                ScrollViewer.VerticalScrollBarVisibility="Auto"
                                ScrollViewer.HorizontalScrollMode="Enabled"
                                ScrollViewer.VerticalScrollMode="Enabled"
                                ItemsSource="{Binding Source={StaticResource CollectionItems}}" Grid.Row="2" SelectionChanged="searchPanelGrid_SelectionChanged">
        <GridView.ItemsPanel>
            <ItemsPanelTemplate>
                <WrapGrid Orientation="Horizontal" />
            </ItemsPanelTemplate>
        </GridView.ItemsPanel>
        <GridView.ItemTemplate>
            <DataTemplate>
                <Grid Margin="6" Height="175" Width="150" Background="#FFFAFAFA">
                    <Grid.RowDefinitions>
                        <RowDefinition Height="85"/>
                        <RowDefinition Height="50"/>
                        <RowDefinition Height="30"/>
                    </Grid.RowDefinitions>
                    <StackPanel Background="#FF0A56BF" Width="150" Height="85" Grid.Row="0">
                        <Image Source="{Binding Path=ThumnailUrl}" Stretch="UniformToFill" HorizontalAlignment="Left" VerticalAlignment="Top"/>
                    </StackPanel>
                    <TextBlock Text="{Binding Path=VideoName}" TextWrapping="Wrap" Foreground="#FF017DD5" Grid.Row="1" HorizontalAlignment="Left" VerticalAlignment="Top" Height="Auto" FontSize="12"/>
                    <Button x:Name="downloadButton" Grid.Row="3" Content="Download Video" HorizontalAlignment="Left" VerticalAlignment="Bottom" Style="{StaticResource DownloadButtonStyle}" Click="downloadButton_Click" IsEnabled="{Binding IsSelected}" />
                </Grid>
            </DataTemplate>
        </GridView.ItemTemplate>
    </GridView>

GridViewのItemsSourceプロパティにバインドするクラス

public class VideoInfo : INotifyPropertyChanged
{
    private bool isSelected;
    public bool IsSelected
    {
        get { return isSelected; }
        set
        {
            isSelected = value;
            NotifyPropertyChanged("IsSelected");
        }
    }

    private string thumnailUrl;
    public string ThumnailUrl
    {
        get { return thumnailUrl; }
        set
        {
            thumnailUrl = value;
            NotifyPropertyChanged("ThumnailUrl");
        }
    }

    private string videoName;
    public string VideoName
    {
        get { return videoName; }
        set
        {
            videoName = value;
            NotifyPropertyChanged("VideoName");

        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    private void NotifyPropertyChanged(string info)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(info));
        }
    }
}

GridView の SelectionChangeEvent の .cs ファイル SearchPanel.xaml.cs

private void searchPanelGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        MovieInfo info = (e.AddedItems[0]) as MovieInfo;
        info.IsSelected = true;
    }
于 2013-08-26T08:23:05.443 に答える