Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF非常初级的问题-设置默认控制值_Wpf - Fatal编程技术网

WPF非常初级的问题-设置默认控制值

WPF非常初级的问题-设置默认控制值,wpf,Wpf,这里是一个WPF新手提出的一个非常基本的问题。 我有一个带有一些控件的表单,比如文本框、日期选择器。 在典型的Windows窗体中,我会在onFormLoad事件中将默认值设置为 txtName.Text = "N/A"; dpStartDate.Value = DateTime.Now(5); //set 5 days from now dpEndDate.Value = DateTime.Now(10); //set 10 days from now 如何在WPF表单中执行此操作,以及在何

这里是一个WPF新手提出的一个非常基本的问题。 我有一个带有一些控件的表单,比如文本框、日期选择器。 在典型的Windows窗体中,我会在onFormLoad事件中将默认值设置为

txtName.Text = "N/A";
dpStartDate.Value = DateTime.Now(5); //set 5 days from now
dpEndDate.Value = DateTime.Now(10); //set 10 days from now
如何在WPF表单中执行此操作,以及在何处执行?这是一个非常初级的问题,在哪里使用正确的WPF方法

更新: 到目前为止,我发现我可以在Window_加载的事件中执行此操作,如:

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    // Initialize Employee Data
    txtName.Text = "N/A";
    dpEmplDate.Text = DateTime.Now.AddDays(-100).Date.ToString();
    dpTermDate.Text = DateTime.Now.AddDays(1).Date.ToString();
    txtAddress.Text = "N/A";
    dpDateOfBirth.Text = "";
    txtDepartment.Text="N/A";
    ...
    ...
}
所以,我像这样设置默认员工值。 我的问题是,这是WPF初始化数据的正确方法吗?
谢谢,

除非您不使用,否则没有设置
控件值的首选项

您可以在XAML中执行此操作:

<TextBox Name=txtName Text="N/A"/>
但WPF是一种非常酷的技术,因为它可以在数据和视图之间提供清晰的关注点分离。它可以使用MVVM模式实现。 可以使用
绑定
在数据和视图之间以及从视图到数据之间发送数据。因此,在MVVM中,模式数据是从
视图模型设置的。语法示例:

查看:

<TextBox Text="{Binding FooProperty}"/>>
public class FooViewModel
{
    private string fooProperty="Hello World";        
    public string FooProperty
    {
        get { return fooProperty; }
        set { fooProperty = value; }
    }
}

DataContext
属性用于连接
View
ViewModel
。如果未设置
DataContext
属性,则不会显示来自
ViewModel
的数据。

此问题的答案是了解WPF引用。你的问题有很多可能的答案。你可以用电脑来做。@NirayDroshi是的,我更新了我的问题。但我想知道这是否是WPF的正确方法。是否应该在窗口加载事件中完成?我应该按照更新中的方式设置默认值,还是有合适的WPF方式?ThanksI强烈建议使用MVVM模式学习WPF。这是对WinFroms的一个非常严重的背离,需要您以不同的方式思考很多事情,但这是WPF设计的工作方式。您稍后会感谢您自己。ASP可以使用MVC,它与MVVM类似,但它们的实现略有不同。@dbnex14是我建议您阅读的第一篇文章。好的,这似乎离我想读的地方更近了。所以在我上面更新的问题中,我必须有一个名为Employee的类,它的属性设置为默认值,然后我将在XAML中使用绑定,比如??这不是要求类雇员是静态的吗?在您的示例中,如果另一个类具有名为FooProperty的属性,{Binding FooProperty}如何知道哪个FooProperty?非常感谢!但是,该类不需要是静态的。可以使用几种不同的方法来实例化ViewModel类。您只需要以某种方式将其放入表单的DataContext中。一个简单的方法(但有点不赞成)是在表单的构造函数中设置它
this.DataContext=newemployee()
。另一个选项是在XAML中直接定义它,如下所示。更好的方法是使用MVVMLight之类的工具或不同的框架将ViewModels与视图绑定,并让它处理管道。@dbnex14每个
控件
都有
数据上下文
属性。因此,可以使用相同的属性名称设置各种
DataContext
。但这将是不同的视图模型。阅读这篇文章@steppup非常感谢,这篇文章非常有用。请注意,在我的XAML示例中,is应该是
,而不是“Form.DataContext”。我最近经常在WinForms和WPF之间切换,结果搞混了。它已通过我原始评论的编辑窗口,因此我无法在那里修复它。
public class FooViewModel
{
    private string fooProperty="Hello World";        
    public string FooProperty
    {
        get { return fooProperty; }
        set { fooProperty = value; }
    }
}