wpf 使用ItemTemplate和DataTemplate在ListView中创建按钮,为什么?

lstz6jyr  于 2022-11-26  发布在  其他
关注(0)|答案(1)|浏览(289)

我遇到了一个ListView的情况。在项目模板中有一个DataTemplate,在DataTemplate中有一个ListViewItem,它的内容是绑定的。当我单击时,我想选择项目,但当我将鼠标悬停在它上面时,似乎有一个使用ItemTemplate和DataTemplate创建的按钮。现在,我可以通过单击同一行中的其他位置来选择项目。但如果我选择了按钮,就不起作用了。我使用SelectedItem,如果您单击该项中的按钮,SelectedItem将不会被触发。
ListView链接到ItemSource,而ListView的SelectedItem绑定到属性
更多信息:语言为C#,IDE为Visual Studio 2010
我会留下我的xaml代码下面,谢谢.
XAML语言

<ListView x:Name="myListView"
                  Grid.Column="0"
                  Grid.Row="2"
                  Height="Auto"
                  Margin="0,0,0,0"
                  SelectionChanged="SchemaListView_SelectionChanged">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ListViewItem Content="{Binding Path=Value}"/>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>

C#语言

void ReadData(string id)
        {
            var data = ExampleData.GetData(id);
                myListView.ItemsSource = data.Results;
            
        }

我尝试过在没有ItemTemplate和DataTemplate的情况下绑定,也尝试过在xaml中链接源代码,但没有成功

yjghlzjz

yjghlzjz1#

ListView的ItemTemplate中不能有ListViewItem
ItemsSource集合的元素还不是ListViewItem时(通常它们从来都不是),框架将自动创建一个ListViewItem,它将成为每个数据项的“项容器”元素。这个自动生成的ListViewItem使用ItemTemplate作为它的ContentTemplate
除此之外,当您未设定ListView的View属性时,请使用ListBox而非ListView
因此,不要使用ListViewItem,而使用ContentControlTextBlock

<ListBox ...>
    <ListBox.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Value}"/>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

如果只有一个content元素,则只需设置DisplayMemberPath属性:

<ListBox ... DisplayMemberPath="Value"/>

相关问题