我进行了搜索和搜索,但似乎无法找到我(可能错误地)认为是一个非常简单的问题的答案。
我有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) {
}
}
答案 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}" />
符合您的需求吗?