C# 在UserControl中绑定文本框
我的看法 我不知道为什么,但是我的UserControl中的TextBox没有填充我的part的Name属性,即使调用了这一行C# 在UserControl中绑定文本框,c#,wpf,xaml,mvvm,C#,Wpf,Xaml,Mvvm,我的看法 我不知道为什么,但是我的UserControl中的TextBox没有填充我的part的Name属性,即使调用了这一行 public class Part { public string Name { get; set; } } 我这样设置视图的数据内容 Model = Part.GetPart(p); 您的代码中有一个小问题: public partial class PartView : UserControl { public PartView() {
public class Part
{
public string Name { get; set; }
}
我这样设置视图的数据内容
Model = Part.GetPart(p);
您的代码中有一个小问题:
public partial class PartView : UserControl
{
public PartView()
{
InitializeComponent();
DataContext = new PartViewModel(new Part());
}
}
应该是:
if (Name != value)
{
Model.Name = value;
this.OnPropertyChanged("Name");
}
自引用视图模型的Name属性会给您带来问题
最后但并非最不重要的一点是,您需要在代码隐藏中使用代码在运行时绑定DataContext
编辑
我刚刚又看了一遍你的代码以及对这个问题的评论。在事件处理程序中设置Model的值时,还需要在那里设置DataContext。更改模型引用不会更新数据上下文。似乎在
PartListViewModel\u on Selected PartChanged
中更改模型时不通知用户界面。更改后,您需要为每个模型相关属性调用this.OnPropertyChanged(…)
,或者使用null参数调用它this.OnPropertyChanged(null)
刷新所有属性
if (Model.Name != value)
{
Model.Name = value;
this.OnPropertyChanged("Name");
}
如果问题发生在运行时,您在何处/如何将PartView
的DataContext
设置为PartViewModel
?问题发生在运行时,我在视图` DataContext=new PartViewModel(new Part())后面的代码中进行设置`尝试调用this.OnPropertyChanged(“名称”)
,甚至可能this.OnPropertyChanged(null)代码>,在Model=Part.GetPart(p)之后代码>。我猜当Model
启动时,您不会通知UIchanged@dkozl字体我发誓我以前试过:)就是这样。现在它起作用了。如果你用简短的回答,我会接受的。谢谢你的提示。但它仍然不会更新文本框
if (Name != value)
{
Model.Name = value;
this.OnPropertyChanged("Name");
}
if (Model.Name != value)
{
Model.Name = value;
this.OnPropertyChanged("Name");
}
void PartListViewModel_OnSelectedPartChanged(Part p)
{
Model = Part.GetPart(p);
this.OnPropertyChanged(null);
}