Предположим, у меня есть следующий ListView:
<ListView Name="listView">
<ListView.View>
<GridView>
<GridViewColumn Header="IsTrue" DisplayMemberBinding="{Binding Path=IsTrue}"/>
<GridViewColumn Header="Name" DisplayMemberBinding="{Binding Path=name}" />
</GridView>
</ListView.View>
</ListView>
И следующий класс тестирования, который я хочу связать:
public class Test
{
public Test(Boolean IsTrue, string name)
{
this.IsTrue = IsTrue;
this.name = name;
}
public Boolean IsTrue { get; set; }
public string name { get; private set; }
}
Вот команда, которую я использую для добавления ListViewItem:
Test a = new Test(false, "a");
listView.Items.Add(a);
Теперь, когда я пытаюсь изменить значение IsTrue объекта, значение IsTrue в ListView не будет обновляться. Почему так?
public class Test : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(PropertyChangedEventArgs args)
{
var e = PropertyChanged;
if (e != null)
e(this, args);
}
private bool isTrue;
public Boolean IsTrue
{
get { return isTrue; }
set
{
if (isTrue == value)
return;
isTrue = value;
OnPropertyChanged(new PropertyChangedEventArgs("IsTrue"));
}
}
public string Name { get; private set; }
public Test(Boolean isTrue, string name)
{
this.isTrue = isTrue;
Name = name;
}
}
Вы должны реализовать интерфейс INotifyPropertyChanged для класса Test
, поэтому, когда вы измените Свойство, пользовательский интерфейс получит уведомление.