gpt4 book ai didi

wpf - 如何使用 TwoWay 模式将 Listview SelectedItem 绑定(bind)到文本框?

转载 作者:行者123 更新时间:2023-12-03 15:04:14 24 4
gpt4 key购买 nike

我对 WPF 非常陌生,并且测试了一些我想包含在我将要处理的应用程序中的东西。我有一个 2 行 ListView(绑定(bind)到一个文本框),其中包含 Scott Guthrie 和 Jon Skeet 的名字。我正在尝试在 ListView 中选择“Scott Guthrie”并让它填充 TextBox。我希望能够编辑文本并关闭标签并更新 ListView。

编辑 :我删除了代码,因为这确实没有为问题添加任何内容。

最佳答案

哇,你得到的东西真的很复杂。

这可以通过非常简单的方式完成。你需要一个模型来代表程序员,一个 View 模型来保存程序员列表,以及简单的绑定(bind)来处理其余的事情。

该模型:

public sealed class Programmer
{
public string Name { get; set; }
}

它非常简单。代表具有名称的程序员的对象。我们必须将名称封装在对象中,因为字符串在 .NET 中是不可变的。如果您尝试绑定(bind)字符串列表中的单个字符串,则更改不会传播。

程序员的集合保存在 ViewModel 中。在这种情况下,我称它为 ViewModel,因为我没有想象力。此 View 模型包含 View 绑定(bind)的所有内容。在这种情况下,它的程序员列表。
public sealed class ViewModel
{
public ObservableCollection<Programmer> Programmers { get; private set; }

public ViewModel()
{
Programmers = new ObservableCollection<Programmer>();
}
}

ViewModel 被设置为我们 View 的 DataContext。 DataContext 沿着可视化树向下流动,我们可以在任何时候对其进行绑定(bind)。
public MainWindow()
{
var vm = new ViewModel();
vm.Programmers.Add(new Programmer { Name = "Jon Skeet" });
vm.Programmers.Add(new Programmer { Name = "Scott Guthrie" });
DataContext = vm;
InitializeComponent();
}

您可以以任何您想要的方式设置 DataContext;为了简单起见,我在这里这样做。

在 UI 中,我只是将 ListView 与 ViewModel 中的 Programmers 列表绑定(bind)(DataContext,除非另有说明,是绑定(bind)路径的根)。然后我将 TextBox 与 ListBox 的 SelectedItem 绑定(bind)。您从列表中选择一个 Programmer,然后它将成为 SelectedItem,然后我可以更改其名称。
<Window
x:Class="Programmers.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:t="clr-namespace:Programmers"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<ListBox
x:Name="list"
ItemsSource="{Binding Programmers}"
DisplayMemberPath="Name" />
<TextBox
Grid.Column="1"
VerticalAlignment="Top"
Text="{Binding SelectedItem.Name, ElementName=list}" />
</Grid>
</Window>

很简单,一旦你掌握了窍门。

关于wpf - 如何使用 TwoWay 模式将 Listview SelectedItem 绑定(bind)到文本框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4529242/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com