WPF ListView ItemTemplate中的TextBox绑定

时间:2016-05-23 10:20:37

标签: c# wpf xaml listview data-binding

我正在尝试在listview的itemtemplate中绑定一个文本框。作为itemssource,我使用的是ObservableCollection。我已尝试通过{Binding}将itemtemplate绑定到datacontext本身,但它给了我InvalidOperationException。这是相关的代码段

0

以下是ViewModel的相关部分

car

实际上我所说的listview是在另一个listview中。一目了然。当我将项目添加到父列表视图时,我创建一个空列表并将其绑定到子列表视图。然后从上下文菜单中添加像这样的相关元素

car

修改 现在我意识到我的绑定是正确的,唯一的问题是我更改文本框内的文本后文本框更改事件不会触发。

2 个答案:

答案 0 :(得分:0)

如果您的绑定正确,则必须将文本框中的绑定模式设置为C<string> cs = new C<string>(); C<object> co = (C<object>)cs;

像:

InvalidCastException

因为,如果您没有设置模式,标准模式为"TwoWay"

如果你不了解它们,

Here是不同的模式。

答案 1 :(得分:0)

现在我意识到我的绑定是正确的,唯一的问题是我更改文本框内的文本后文本框更改事件不会触发。

然后你应该在模型类中实现INotifyPropertyChanged

public class TableCreator:INotifyPropertyChanged
{

    private string yourVariable;
    public string YourVariable
    {
        get { return YourVariable; }
        set {
            YourVariable =value;
            OnPropertyChanged("YourVariable");
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    public void OnPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }

}

As MSDN says

  

原因INotifyPropertyChanged0通知客户端(UI)属性值已更改。

如下例所示:

public class Person:INotifyPropertyChanged
{
    public int IdPerson { get; set; }

    private string name;
    public string Name
    {
        get { return name; }
        set {
            name =value;
            OnPropertyChanged("Name");
        }
    }

    private string surname;
    public string SurName
    {
        get { return surname; }
        set
        {
            surname = value;
            OnPropertyChanged("SurName");
        }
    }        

    public event PropertyChangedEventHandler PropertyChanged;
    public void OnPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }

}