我正在尝试在listview的itemtemplate中绑定一个文本框。作为itemssource,我使用的是ObservableCollection。我已尝试通过{Binding}将itemtemplate绑定到datacontext本身,但它给了我InvalidOperationException。这是相关的代码段
0
以下是ViewModel的相关部分
car
实际上我所说的listview是在另一个listview中。一目了然。当我将项目添加到父列表视图时,我创建一个空列表并将其绑定到子列表视图。然后从上下文菜单中添加像这样的相关元素
car
修改 现在我意识到我的绑定是正确的,唯一的问题是我更改文本框内的文本后文本框更改事件不会触发。
答案 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));
}
}
原因
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));
}
}