0

ListView データバインディングを ObservableCollection に設定しようとしています。そして、リスト ビューの各項目の権限を確認するコンテキスト メニューを追加します。そのため、「ItemsSource を使用する前に、Items コレクションを空にする必要があります」というエラーが表示されます。しかし、ListView で ItemsSource を削除すると、データバインディングを使用できなくなります。手伝って頂けますか?http://www.mediafire.com/?r21lm8ud9q92o5kで例をダウンロードできます。

        <ListView ItemsSource="{Binding}"
        Height="259" HorizontalAlignment="Left" Margin="12,26,0,0" Name="listView1" VerticalAlignment="Top" Width="479">
        <ListView.Items>                
            <ListViewItem>                    
                <ListViewItem.ContextMenu>
                    <ContextMenu>
                        <MenuItem Header="Kiểm tra">
                            <MenuItem.Icon>
                                <Image Source="Images/CompareFiles.png" Style="{StaticResource ImageContextMenu}"/>
                            </MenuItem.Icon>
                        </MenuItem>

                        <MenuItem Header="Download" Visibility="{Binding Path=Name, Converter={StaticResource MenuContext}, ConverterParameter= {x:Static ObservableCollectionProblem:EnumUserAction.Download}}">
                            <MenuItem.Icon>
                                <Image Source="Images/SyncCurrentObject.png" Style="{StaticResource ImageContextMenu}"/>
                            </MenuItem.Icon>
                        </MenuItem>
                        <MenuItem Header="Upload" Visibility="{Binding Path=Actions, Converter={StaticResource MenuContext}, ConverterParameter = {x:Static ObservableCollectionProblem:EnumUserAction.Upload}}">
                            <MenuItem.Icon>
                                <Image Source="Images/upload.png" Style="{StaticResource ImageContextMenu}"/>
                            </MenuItem.Icon>
                        </MenuItem>
                    </ContextMenu>
                </ListViewItem.ContextMenu>
                <GridView>
                    <GridViewColumn Width="250" DisplayMemberBinding="{Binding Path=Name}" Header="Name"></GridViewColumn>
                    <GridViewColumn Width="250" DisplayMemberBinding="{Binding Path=Actions, Converter={StaticResource ActionToStringConverter}}" Header="Action"></GridViewColumn>
                </GridView>
            </ListViewItem>
        </ListView.Items>
        <ListView.ContextMenu>
            <ContextMenu>
                <MenuItem Header="Kiểm tra">
                    <MenuItem.Icon>
                        <Image Source="Images/CompareFiles.png" Style="{StaticResource ImageContextMenu}"/>
                    </MenuItem.Icon>
                </MenuItem>

                <MenuItem Header="Download" Visibility="{Binding Path=Name, Converter={StaticResource MenuContext}, ConverterParameter= {x:Static ObservableCollectionProblem:EnumUserAction.Download}}">
                    <MenuItem.Icon>
                        <Image Source="Images/SyncCurrentObject.png" Style="{StaticResource ImageContextMenu}"/>
                    </MenuItem.Icon>
                </MenuItem>
                <MenuItem Header="Upload" Visibility="{Binding Path=Actions, Converter={StaticResource MenuContext}, ConverterParameter = {x:Static ObservableCollectionProblem:EnumUserAction.Upload}}">
                    <MenuItem.Icon>
                        <Image Source="Images/upload.png" Style="{StaticResource ImageContextMenu}"/>
                    </MenuItem.Icon>
                </MenuItem>                    
            </ContextMenu>
        </ListView.ContextMenu>
        <ListView.View>
            <GridView>                    
                <GridViewColumn Width="250" DisplayMemberBinding="{Binding Path=Name}" Header="Name"></GridViewColumn>
                <GridViewColumn Width="250" DisplayMemberBinding="{Binding Path=Actions, Converter={StaticResource ActionToStringConverter}}" Header="Action"></GridViewColumn>
            </GridView>
        </ListView.View>
    </ListView>
4

2 に答える 2

0

ItemContainerStyleにコンテキストメニューを追加して成功

<ListView Height="259" HorizontalAlignment="Left" Margin="12,26,0,0" Name="listView1" VerticalAlignment="Top" Width="479">                         
        <ListView.Resources>
            <ContextMenu x:Key="ItemContextMenu">                    
                <MenuItem Header="Kiểm tra">
                    <MenuItem.Icon>
                        <Image Source="Images/CompareFiles.png" Style="{StaticResource ImageContextMenu}"/>
                    </MenuItem.Icon>
                </MenuItem>
                <MenuItem Header="Download" Visibility="{Binding Path=Actions, Converter={StaticResource MenuContext}, ConverterParameter= {x:Static ObservableCollectionProblem:EnumUserAction.Download}}">
                    <MenuItem.Icon>
                        <Image Source="Images/SyncCurrentObject.png" Style="{StaticResource ImageContextMenu}"/>
                    </MenuItem.Icon>
                </MenuItem>
                <MenuItem Header="Upload" Visibility="{Binding Path=Actions, Converter={StaticResource MenuContext}, ConverterParameter = {x:Static ObservableCollectionProblem:EnumUserAction.Upload}}">
                    <MenuItem.Icon>
                        <Image Source="Images/upload.png" Style="{StaticResource ImageContextMenu}"/>
                    </MenuItem.Icon>
                </MenuItem>
            </ContextMenu>
        </ListView.Resources>
        <ListView.ItemContainerStyle>
            <Style TargetType="{x:Type ListViewItem}">
                <EventSetter Event="PreviewMouseLeftButtonDown" Handler="OnListViewItem_PreviewMouseLeftButtonDown" />
                <Setter Property="ContextMenu" Value="{StaticResource ItemContextMenu}"/>
            </Style>
        </ListView.ItemContainerStyle>
        <ListView.View>                
            <GridView>                    
                <GridViewColumn Width="250" DisplayMemberBinding="{Binding Path=Name}" Header="Name"></GridViewColumn>
                <GridViewColumn Width="250" DisplayMemberBinding="{Binding Path=Actions, Converter={StaticResource ActionToStringConverter}}" Header="Action"></GridViewColumn>
            </GridView>
        </ListView.View>
    </ListView>
于 2012-06-01T02:19:16.527 に答える
0

内のアイテムのソースを 1 回だけ持つことができます。この場合、XAML でコレクションをListView明示的に設定しているように見えます。ListView.Itemsこれにより、ItemsSource を使用してバインドしようとしたときに表示されるエラーが発生します。

おそらくListView.Items、XAML からノードを削除し、ItemsSourceバインディングのみを使用してリストを作成してみてください。

を使用しListView.ItemTemplateて、アイテムを希望どおりにフォーマットし、コンテキスト メニューを正しく表示することもできます。

于 2012-05-31T14:30:01.493 に答える