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}。但是直接使用字符串实例的正确方法是什么呢?更新你的问题,伙计。包括所有额外的限制,以便我们可以为您提供有意义的答案。