gpt4 book ai didi

c# - 除非已绑定(bind),否则返回 null 的属性?

转载 作者:行者123 更新时间:2023-12-03 11:02:27 25 4
gpt4 key购买 nike

         Window2 X = new Window2();
var taskViewModel = (XViewModel)X.DataContext;
taskViewModel.Name = Username;
X.Show();

我挣扎了好几个小时,以为上面的代码不能正常工作。
因为如果我绑定(bind) Name例如第二种形式的文本 block ,该值将显示。如果我使用 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>

只要我使用第一个代码打开窗口,它就会正确显示。

编辑:我试图制作一个按钮并绑定(bind)一个调用 MessageBox 的命令。在本例中,名称为 正确显示 .

EDIT2:这也不起作用:
        Window2 w = new Window2();
XViewModel vm = new XViewModel ();
vm.Name = Username;
w.DataContext = vm;
w.Show();

最佳答案

问题是您要在设置属性之前的构造函数中显示 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();

关于c# - 除非已绑定(bind),否则返回 null 的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51267317/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com