ListViewItem与CheckBox IsChecked绑定到ViewModel

时间:2014-04-29 08:35:09

标签: c# wpf listview checkbox templatebinding

我有一个带有DataTemplate的ListView,用于为每个ListViewItem显示一个复选框。

enter image description here

<ListView ItemsSource="{Binding TableNames}">
    <ListView.ItemTemplate>
        <DataTemplate>
            <CheckBox Content="{Binding}" IsChecked="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=IsSelected, Mode=TwoWay}" />
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

ItemsSource(&#34; TableNames&#34;)在ViewModel中被解除,如下所示:

private ObservableCollection<Item> _TableNames = new ObservableCollection<Item>();
public ObservableCollection<Item> TableNames
{
    get { return _TableNames; }
    set
    {
        _TableNames = value;
        OnPropertyChanged("TableNames");
    }
}

public class Item
{
    public bool IsSelected { get; set; }

    public string Name { get; set; }

    public override string ToString()
    {
        return this.Name;
    }
}

如何将Checkbox中的IsChecked绑定到Item.IsSelected属性?

我的代码无效。

2 个答案:

答案 0 :(得分:7)

试试这个

<DataTemplate>    
<CheckBox Content="{Binding Name}" IsChecked="{Binding IsSelected}" />
</DataTemplate>

答案 1 :(得分:4)

删除RelativeSource

<CheckBox Content="{Binding}" IsChecked="{Binding IsSelected}" />

由于DataContext的{​​{1}}将设置为ListViewItem的实例,您需要指定的是Item的路径