Window2 X = new Window2();
var taskViewModel = (XViewModel)X.DataContext;
taskViewModel.Name = Username;
X.Show();
我努力工作了好几个小时,以为上面的代码不能正常工作。
因为例如如果我以第二种形式将Name
绑定到Textblock,则该值将显示出来。如果我使用Console.Write
编写它或尝试在MessageBox
中显示它,则返回null,则不会显示任何内容。是什么原因造成的?
public string Name
{
get { return _Name; }
set
{
_Name = value;
NotifyOfPropertyChange("Name");
}
}
Public XViewModel()
{
MessageBox.Show(Name);
}
就像这样,上面的messageBox将为空。但是,如果我这样做:
<TextBlock FontWeight="Bold" Text="{Binding Name}" ></TextBlock>
使用第一个代码打开窗口后,它将正确显示。
编辑:我试图制作一个按钮并绑定了一个调用MessageBox的命令。在这种情况下,名称将正确显示。
EDIT2:这也不起作用:
Window2 w = new Window2();
XViewModel vm = new XViewModel ();
vm.Name = Username;
w.DataContext = vm;
w.Show();
答案 0 :(得分:2)
问题是您正试图在设置属性之前在构造函数中显示Name:
// Here i think you are creating XViewModel
Window2 X = new Window2();
//Here where the Messagebox shows
var taskViewModel = (XViewModel)X.DataContext;
//Here you set the property
taskViewModel.Name = Username;
// Now the value is correctly shown in the textblock
X.Show();
在创建对象XViewModel之后尝试设置属性的值:
public class Window2
{
public Window2(XViewModel vm)
{
InitializeComponent();
DataContext = vm;
}
}
编辑:
让我们做点其他事情:
以这种方式定义 XViewModel 类:
public class XViewModel
{
public XViewModel(String nameProp)
{
Name = nameProp;
MessageBox.Show(Name);
}
// Your Properties
// Your Methods
}
// Create XViewModel and pass it to Window 2
var taskViewModel = new XViewModel(Username); //HERE where messagebox shows
Window2 X = new Window2(taskViewModel);
// Now the value is correct shown in the textblock
X.Show();