【问题标题】:WPF Listview - Get row where property changedWPF Listview - 获取属性更改的行
【发布时间】:2015-08-14 22:26:45
【问题描述】:

我有一个列表视图,其中包含具有 int ID 和字符串名称的对象。名称列是用户可编辑的文本框。如果用户更改了名称,我希望能够在列表中搜索具有相同 ID 的其他对象并更改这些名称。

我的大问题是,我想使用文本框的 LostFocus 属性来获取整个行或对象,而不仅仅是文本框。

下面的 XAML 已大大简化,但我认为它传达了基本思想:

<ListView x:Name="linkList"
<GridViewColumn Width="75">
    <GridViewColumn.CellTemplate>
        <TextBox Text="{Binding linkName}" LostFocus="TextBox_LostFocus"/>
    </GridViewColumn.CellTemplate>
</GridViewColumn>

<GridViewColumn Width="75">
    <GridViewColumn.CellTemplate>
        <TextBox Text="{Binding linkID}"/>
    </GridViewColumn.CellTemplate>
</GridViewColumn>

所以在后面的代码中:

    private void TextBox_LostFocus(object sender, RoutedEventArgs e)
    {
        //sender is the textbox in this case. so how 
        //would I get the object in that particular row so I can get its ID#?
    }

我需要识别该特定行,因为用户可以单击不同的行或按“输入”来保存名称更改。因此,通过当前选定的行是不好的。有什么想法吗?

【问题讨论】:

    标签: wpf listview


    【解决方案1】:

    Google 获取 GetVisualAncestor&lt;T&gt; 扩展并使用它。

    ((TextBox)sender).GetVisualAncestor<ListViewItem>();
    

    【讨论】:

    • Textbox 没有 GetVisualAncestor 方法。
    • @Akansha 你知道怎么读吗?我说谷歌的扩展方法。 LMAO。为你缺乏阅读能力投反对票?你 5 岁吗?
    • 我对您的答案投了反对票,因为它不能解决问题,而是会引发另一个错误。如果您不确定答案并想提出一些建议,您可以在提出的问题中添加评论。如果您提供建议,请至少留下一些教程的链接。建议某人谷歌解决这个问题是没有答案的,最重要的是,你希望我支持它。哈哈.. 如果用户不得不经历谷歌搜索的麻烦,那么在这里发布问题有什么意义。雅是 5 .. 至少我比你大。 :p
    • @SledgeHammer 这是一个很好的起点,我什至不确定我在谷歌上寻找的术语。
    【解决方案2】:

    现在很明显,但我只需要找到 ListViewItem 类型的祖先,就可以从该对象中提取我需要的信息。

    private void TextBox_LostFocus(object sender, RoutedEventArgs e)
    {
        ListViewItem changedRow = GetAncestorOfType<ListViewItem>(sender as TextBox);
        //now I can get the info I need from the changedRow object!
    }
    
    public T GetAncestorOfType<T>(FrameworkElement child) where T : FrameworkElement
    {
        var parent = VisualTreeHelper.GetParent(child);
        if (parent != null && !(parent is T))
            return (T)GetAncestorOfType<T>((FrameworkElement)parent);
        return (T)parent;
    }
    

    【讨论】:

      猜你喜欢
      • 2019-02-16
      • 2017-07-20
      • 2014-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多