将输入控件绑定到可观察集合MVVM方法中的当前所选项

时间:2014-04-09 18:36:16

标签: wpf data-binding mvvm listbox

我想知道是否有办法将列表框中当前选定的单个项目绑定到WPF中的一组文本框和按钮。

说我有一个像这样的列表框

<ListBox Margin="5"
 ItemsSource="{Binding Tags}"></ListBox>

像这样的视图模型

public sealed class HomeViewModel : DependencyObject
{
    public ObservableCollection<ViewModels.TagViewModel> Tags { get; set; }
}

该可观察集合中的每个TagViewModel看起来都是这样的

public class TagViewModel
{

    public ICommand SaveNewTag { get; set; }
    public ICommand DeleteCurrentTag { get; set; }

    public int id { get; set; }
    public string Name { get; set; }
}

我如何选择列表框中的项目仅绑定到该特定项目的Name属性,并将其命令绑定到我使用MVVM的两个按钮接近?

<TextBlock FontWeight="Bold"
                               HorizontalAlignment="Center"
                               Margin="0 0 0 40">Tags</TextBlock>
                        <Button Margin="0 0 0 10"
                                Command="{Binding SaveNewTag}">Add</Button>
                        <Button Margin="0 0 0 50"
                                Command="{Binding DeleteCurrentTag}">Delete</Button>
                        <TextBox MinWidth="200" ToolTip="Tag you want to add"
                                 Text="{Binding Name, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>

1 个答案:

答案 0 :(得分:0)

给出

<ListBox Margin="5" x:Name="tagsListBox" ItemsSource="{Binding Tags}"></ListBox>

我将包装此控件

<StackPanel DataContext="{Binding ElementName=tagsListBox,Path=SelectedItem.DataContext}">
 <TextBlock FontWeight="Bold"
            HorizontalAlignment="Center"
            Margin="0 0 0 40">Tags</TextBlock>
 <Button Margin="0 0 0 10"
         Command="{Binding SaveNewTag}">Add</Button>
 <Button Margin="0 0 0 50"
         Command="{Binding DeleteCurrentTag}">Delete</Button>
 <TextBox MinWidth="200" ToolTip="Tag you want to add"
          Text="{Binding Name, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
</StackPanel>

基本上,您可以执行ElementName绑定,根据Display View更新您拥有的SelectedItem。我只是将它包装在StackPanel中,以便子项继承DataContext值。如果要为每个子控件设置DataContext,可以选择。