Wpf 如何将文本框绑定到纯字符串集合
作为大数据模型的一部分,我需要显示/编辑一个字符串集合,如Wpf 如何将文本框绑定到纯字符串集合,wpf,data-binding,textbox,Wpf,Data Binding,Textbox,作为大数据模型的一部分,我需要显示/编辑一个字符串集合,如observetecollection定义。在prototype应用程序中,我们使用列表视图显示整个集合,并使用文本框编辑所选元素。文本框应绑定到集合的当前元素。由于GUI可能会发生更改,我无法使用直接绑定 我试着用 <TextBox Text="{Binding Path=/, UpdateSourceTrigger=PropertyChanged}"/> 但它只在一个方向上起作用,更改listview当前项会导致更新
observetecollection
定义。在prototype应用程序中,我们使用列表视图显示整个集合,并使用文本框编辑所选元素。文本框应绑定到集合的当前元素。由于GUI可能会发生更改,我无法使用
直接绑定
我试着用
<TextBox Text="{Binding Path=/, UpdateSourceTrigger=PropertyChanged}"/>
但它只在一个方向上起作用,更改listview当前项会导致更新文本框,而在其他方面则不会
如何将文本框直接绑定到字符串集合中当前元素的sting实例?好的,这是您的ListView。我将为它添加一个名称,以便在XAML中的其他位置引用它:
<ListView
x:Name=stringList
ItemsSource="{Binding}"
SelectionMode="Single"
IsSynchronizedWithCurrentItem="True">
<ListView.View>
<GridView>
<GridViewColumn
Header="Data Item"
Width="80"
DisplayMemberBinding="{Binding}"/>
</GridView>
</ListView.View>
</ListView>
现在,在右侧的文本框中,您可以直接绑定到ListView:
<TextBox Text="{Binding SelectedItem,ElementName=stringList}" />
由于ListView直接绑定到字符串列表,因此SelectedItem将是当前所选ListViewItem指向的字符串
更新
因为不允许使用ElementBinding,所以最好引入一个ViewModel类,使其位于列表和窗口之间。定义如下:
public class StringListViewModel : INotifyPropertyChanged
{
// you'll have to implement INotifyPropertyChanged - I won't
// do that here - do a quick search to learn how it works.
public ObservableCollection<String> List { get; set; }
private object _si;
public object SelectedItem
{
get { return _si; }
set
{
_si = value;
OnPropertyChanged("SelectedItem");
}
}
}
<ListView ItemsSource="{Binding List}" SelectedItem="{Binding SelectedItem}" ... />
公共类StringListViewModel:INotifyPropertyChanged
{
//您必须实现INotifyPropertyChanged-我不会
//在这里这样做-快速搜索以了解其工作原理。
公共ObservableCollection列表{get;set;}
私有对象;
公共对象SelectedItem
{
获取{return\u si;}
设置
{
_si=值;
OnPropertyChanged(“SelectedItem”);
}
}
}
现在,将窗口的DataContext设置为ViewModel类的实例,而不是将其直接指向字符串列表。将ListView的ItemsSource绑定并选择EdItem,如下所示:
public class StringListViewModel : INotifyPropertyChanged
{
// you'll have to implement INotifyPropertyChanged - I won't
// do that here - do a quick search to learn how it works.
public ObservableCollection<String> List { get; set; }
private object _si;
public object SelectedItem
{
get { return _si; }
set
{
_si = value;
OnPropertyChanged("SelectedItem");
}
}
}
<ListView ItemsSource="{Binding List}" SelectedItem="{Binding SelectedItem}" ... />
现在将文本框绑定到ViewModel的SelectedItem:
<TextBox Text="{Binding SelectedItem}" />
现在,您的列表设置ViewModel上的SelectedItem,无论何时更改,文本框都会反映该值。希望这有意义。如果文本框绑定到字符串集合,您希望文本框显示什么?collectionOk的当前元素,表单中“当前”的定义是什么?您的文本框是否在某种ItemsControl中,如列表框?是的,左侧有一个列表视图,右侧有一个用于编辑的文本框。列表视图像“”一样绑定。列表视图中的选择更改会导致更新文本框,但只有一种方式,如果我更改文本框中的文本,则列表视图不会更新。在我发布答案时,使用该信息更新您的问题(因此代码的格式很好)。是的,这会起作用,但是。。这是设计问题,我不允许直接绑定GUI元素。如果我定义一个只有一个字符串属性的类,例如Name,那么绑定工作得非常好,所以我使用这个属性,比如{binding Path=Name}。但是直接使用字符串实例的正确方法是什么呢?更新你的问题,伙计。包括所有额外的限制,以便我们可以为您提供有意义的答案。