使通用Windows平台中的特定ListView项无法单击

Vas*_*Doe 3 c# xaml microsoft-metro win-universal-app uwp

ListView在我的XAML中使用了一个元素:

                <ListView
                x:Name="myList"
                IsItemClickEnabled="true"
                ItemClick="onDrawerItemClick"
                SelectionMode="Single"
                ScrollViewer.VerticalScrollBarVisibility="Hidden">

                <ListView.ItemTemplate>
                    <DataTemplate>

                        <Grid
                            Width="260">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition
                                    Width="44" />
                                <ColumnDefinition
                                    Width="*" />
                            </Grid.ColumnDefinitions>

                            <Image
                                x:Name="image"
                                Source="{Binding myIcon}"
                                Grid.Column="0" />

                            <TextBlock
                                Text="{Binding myTxt}"
                                Grid.Column="1" />

                        </Grid>

                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>
Run Code Online (Sandbox Code Playgroud)

我使用Bind属性填充它,如下所示:

List<MyObj> listData = a list with title + image uri;
myList.ItemsSource = listData;
Run Code Online (Sandbox Code Playgroud)

我需要禁用一些项目的点击,具体取决于MyObj我的列表中的某些值,但其他项目要有.在Android中我们使用适配器,我应该如何处理它?

Jus*_* XL 8

首先,您应该创建一个在对象内部bool调用的新属性.DisabledMyObj

然后,订阅您可以访问其相应myListContainerContentChanging事件,在这种情况下是您的.因此,如果是,则使其不可点击.ListViewItemItemMyObjMyObj.DisabledtrueListViewItem

private void myList_ContainerContentChanging(ListViewBase sender, ContainerContentChangingEventArgs args)
{
    var listViewItem = args.ItemContainer;

    if (listViewItem != null)
    {
        var model = (MyObj)args.Item;

        if (model.Disabled)
        {
            listViewItem.IsHitTestVisible = false;

            // OR
            //listViewItem.IsEnabled = false;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

请记住,listViewItem.IsEnabled = false如果您希望该项目显示为灰色,则可能需要使用.这是因为默认ListViewItem样式具有禁用状态,减少了它Opacity; 而设置listViewItem.IsHitTestVisible = false不会以任何方式改变其外观.