Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.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 为什么DisplayMemberPath不';你不接受标准财产吗?_Wpf_Binding_Itemsource - Fatal编程技术网

Wpf 为什么DisplayMemberPath不';你不接受标准财产吗?

Wpf 为什么DisplayMemberPath不';你不接受标准财产吗?,wpf,binding,itemsource,Wpf,Binding,Itemsource,我正在将对象列表绑定到组合框 <ComboBox Name="comboPerson" DisplayMemberPath="Name"/> 非工作版本: public string Name { get; set; } public string Surnamge { get; set; } public int Age { get; set; } public Person(string name, string surname, int age) { this.N

我正在将对象列表绑定到组合框

<ComboBox Name="comboPerson"  DisplayMemberPath="Name"/>
非工作版本:

public string Name { get; set; }
public string Surnamge { get; set; }
public int Age { get; set; }

public Person(string name, string surname, int age)
{
    this.Name = name;
    this.Surnamge = surname;
    this.Age = age;
}
public string Name;
public string Surnamge;
public int Age;

public Person(string name, string surname, int age)
{
    this.Name = name;
    this.Surnamge = surname;
    this.Age = age;
}

问题是:为什么WPF无法从标准属性获取值?

第二个代码不包含标准属性,它包含字段。WPF需要属性,您还应该实现
INotifyPropertyChanged
,否则WPF将无法捕获更改的数据


另一个注意事项是:不要直接公开字段,而是将它们封装在属性中。这样做,您可以控制进入类的数据,并且类之外的代码本身不能以非想要的方式影响类。

第二个代码不包含标准属性,它包含字段。WPF需要属性,您还应该实现
INotifyPropertyChanged
,否则WPF将无法捕获更改的数据

另一个注意事项是:不要直接公开字段,而是将它们封装在属性中。这样做,您可以控制进入类的数据,并且类之外的代码本身不能以非想要的方式影响类。

您的“非工作”版本不使用属性,而是使用公共字段,您通常不应该使用这些字段,因为它违反了

WPF的设计使得它只能通过属性的访问器访问属性。字段不是通过访问器(如果使用
{get;set;}
语法,则由编译器生成)访问的,而是直接访问的。如果使用属性,还可以利用自动更新之类的好功能(如果正确实现
INotifyPropertyChanged

因此,如果您想在WPF中使用绑定,您需要使用属性。

您的“非工作”版本不使用属性,它使用公共字段,您通常不应该使用公共字段,因为它违反了

WPF的设计使得它只能通过属性的访问器访问属性。字段不是通过访问器(如果使用
{get;set;}
语法,则由编译器生成)访问的,而是直接访问的。如果使用属性,还可以利用自动更新之类的好功能(如果正确实现
INotifyPropertyChanged


因此,如果您想在WPF中使用绑定,您需要使用属性。

谢谢,我知道使用字段不是一个好的做法,我使用字段只是为了测试绑定,但后来我意识到WPF不能使用字段。谢谢,我知道使用字段不是一个好的做法,我使用字段只是为了测试绑定,但后来我意识到WPF不能使用字段。但是如果类库使用字段而不是属性,我该怎么办?那么我如何绑定到这些字段呢?不能绑定到字段。您可以编写一个包装器类,它接受库类的一个实例并将其字段作为属性公开。要在包装器类中获得通知机制,我是否必须每n秒检查库中的更改,然后引发PropertyManaged事件?是的,这是可能的,但是如果类库使用字段而不是属性,我该怎么办呢?那么我如何绑定到这些字段呢?不能绑定到字段。您可以编写一个包装器类,该类接受库类的一个实例并将其字段作为属性公开。要在我的包装器类中获得通知机制,我是否必须每n秒检查库中的更改,然后引发PropertyManaged事件?是的,如果您希望值随时间而更改,那么这是可能的。
public string Name;
public string Surnamge;
public int Age;

public Person(string name, string surname, int age)
{
    this.Name = name;
    this.Surnamge = surname;
    this.Age = age;
}