==
проверяет ссылки на объекты, .equals()
проверяет строковые значения.
Иногда кажется, что ==
сравнивает значения, потому что Java делает некоторые закулисные вещи, чтобы убедиться, что одинаковые строки в строке являются одним и тем же объектом.
Для Например:
String fooString1 = new String("foo");
String fooString2 = new String("foo");
// Evaluates to false
fooString1 == fooString2;
// Evaluates to true
fooString1.equals(fooString2);
// Evaluates to true, because Java uses the same object
"bar" == "bar";
Но будьте осторожны с нулями!
==
обрабатывает строки null
в порядке, но вызов .equals()
из пустой строки приведет к исключению:
String nullString1 = null;
String nullString2 = null;
// Evaluates to true
System.out.print(nullString1 == nullString2);
// Throws a NullPointerException
System.out.print(nullString1.equals(nullString2));
Итак, если вы знаете, что fooString1
может но не менее очевидно, что он проверяет значение null (из Java 7):
System.out.print(Objects.equals(fooString1, "bar"));
Класс статьи:
public class Article : INotifyPropertyChanged
{
public ObservableCollection<ArticleLocation> locations;
public string Location {
get => location;
set
{
if (location == null || !location.Equals(value))
{
location = value;
RaisePropertyChanged("Location");
}
}
}
}
Класс статьиLocation:
public class ArticleLocation : INotifyPropertyChanged
{
private string location;
public string Location {
get => location;
set
{
if (location == null || !location.Equals(value))
{
location = value;
RaisePropertyChanged("Location");
}
}
}
}
в вашем классе xaml.cs:
public MainWindow()
{
InitializeComponent();
Article article = new Article();
this.DataContext = article;
}
Я обнаружил проблему, свойства Locations и SelectedLocation были созданы как внутренние из-за того, что класс ArticleLocation не был общедоступным и поэтому не мог быть доступен для представления XAML.
Изменение класса ArticleLocation на public и свойств в моем классе Article на public, которые они начали показывать в поле со списком.