C# 在UserControl中绑定文本框

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() {

我的看法

我不知道为什么,但是我的UserControl中的TextBox没有填充我的part的Name属性,即使调用了这一行

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);
}