单击带有DataTemplate的ListBox,选择ListBox Item

时间:2011-05-13 05:03:34

标签: wpf listbox datatemplate

当您点击ListBox(其DataTemplate)内的控件时,我想知道哪个项目可以选择该项目。

我有一个ListBox的WPF应用程序。使用DataTemplate,我内部有TextBlockTextbox

<ListBox PreviewMouseLeftButtonDown="myHandler">
  <ListBox.ItemTemplate>
    <DataTemplate>
      <StackPanel>
        <TextBlock />
        <TextBox />
      </StackPanel>
    </DataTemplate>
  </ListBox.ItemTemplate>
</ListBox>

现在,如果单击TextBlock,它将选择整个项目。但是如果你在TextBox中单击(重复:Box,而不是Block),它就不会选择该项目。

我可以在ListBox的PreviewMouseLeftButtonDown中放入代码,它可以告诉我单击了TextBox的ListBoxItem的索引吗?或者其他一些方法来选择ListBoxItem?

3 个答案:

答案 0 :(得分:2)

只看一下这个链接

ListBoxItem selection on TextBox focus

答案 1 :(得分:2)

首先,我想再次看一下UI组合...文本框作为列表框的项目很少见。列表框通常是项目的选择器(而不是编辑器)。

有了这个......如果你真的必须拥有它。使用基于ViewModel的方法(如果您是新手,请搜索Josh Smith的MVVM文章)。使这项工作背后的想法是VM / ItemVM监听TextProperty的更改通知。一旦获得一个,它就会找到相关项并切换项的IsSelected属性。您需要将ListItem的IsSelected属性绑定到VM的IsSelected属性才能使其工作。

答案 2 :(得分:0)

如果你使用mvvm,请使用Gishu给出的方法。

如果没有,你可以使用TextBox GetFocus事件,将可视树向上走到listboxitem并选择它。