如何获取或设置列表视图

时间:2017-12-25 19:32:24

标签: c# wpf listview

我进行了搜索和搜索,但似乎无法找到我(可能错误地)认为是一个非常简单的问题的答案。

我有listview,用户可以使用按钮和OpenFileDialog添加项目。这有效。

问题如下:

列表视图中的一列包含文本框。我希望用户能够将(数值)值添加到文本框中,并且该值将与该项目相关联(在该行中)。我在其中一个列中创建了一个文本框,经过非常广泛的搜索后,我添加了LostFocus选项以获得它的值(即 - 文本框值)。现在的问题是列表视图中的selecteditem的索引并不总是被设置(可能是因为在lostfocus调用之前选择了该项)。这导致selectedindex为-1,所以我不知道哪个项应该与文本框中的文本相关联。

我也尝试过使用鼠标点击事件,这将有助于我选择合适的项目,但这也不富有成效。

我正在使用 listview wpf 这么多我遇到的解决方案似乎都无关紧要。另外,我对wpf(和业余程序员)都很陌生,所以我无法理解复杂的解决方案......但是,我认为这个问题可能并不像看起来那么复杂。

请帮助。

这是我的代码:

<ListView.View>
    <GridView>
        <GridViewColumn Width="30" Header="Num" DisplayMemberBinding="{Binding Num}" />
        <GridViewColumn Width="100" Header="Name" DisplayMemberBinding="{Binding Name}" />
        <GridViewColumn Width="50" Header="FromPage">
            <GridViewColumn.CellTemplate>
                <DataTemplate>
                    <TextBox x:Name="txt_TBFromPage" LostFocus="txt_FromPage_LostFocus" Text="{Binding SelectedItem, Mode=TwoWay, ElementName=txtValue}"/>
                </DataTemplate>
            </GridViewColumn.CellTemplate>
        </GridViewColumn>
    </GridView>
</ListView.View>

这是c#部分:

private void txt_FromPage_LostFocus(object sender, RoutedEventArgs e){
    int Index = MyListView.SelectedIndex;

    Index = MyListView.Items.IndexOf(MyListView.SelectedItem);

    try {
        //Get cell value by using sender Object
        string TextValue = ((System.Windows.Controls.TextBox)sender).Text;

        MyItem item = (MyItem)MyListView.Items[Index];
        item.FromPage = TextValue;

    }

    catch (Exception) {

    }
}

1 个答案:

答案 0 :(得分:0)

您可以添加以下内容:

的.cs

    private void txt_TBFromPage_GotFocus(object sender, RoutedEventArgs e)
    {
        this.MyListView.SelectedItem = (sender as FrameworkElement).DataContext;
    }

的.xaml

    <TextBox x:Name="txt_TBFromPage" GotFocus="txt_TBFromPage_GotFocus"  LostFocus="txt_TBFromPage_LostFocus"  Text="{Binding SelectedItem, Mode=TwoWay, ElementName=txtValue}" />

符合您的需求吗?