public abstract class Notifier : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void RaisePropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
protected void SetProperty<T>(ref T propertyField, T newValue, [CallerMemberName] string propertyName = null)
{
if (!Equals(propertyField, newValue))
{
T oldValue = propertyField;
propertyField = newValue;
RaisePropertyChanged(propertyName);
OnPropertyChanged(propertyName, oldValue, newValue);
}
}
protected virtual void OnPropertyChanged(string propertyName, object oldValue, object newValue) { }
}
internal class Person : Notifier
{
public string Name { get => _name; set => SetProperty(ref _name, value); }
public int Age { get => _age; set => SetProperty(ref _age, value); }
private string _name;
private int _age;
}
<ListView x:Name="listView" Grid.Row="1">
<ListView.View>
<GridView>
<GridViewColumn Header="Name" Width="100" DisplayMemberBinding="{Binding Name}"/>
<GridViewColumn Header="Age" Width="100">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock Width="100" Text="{Binding Age}" TextAlignment="Center"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
Как отформатировать текст в ячейке? То есть, не просто число из свойства модели, а, например, 27 лет
. А если указано 0
или меньше нуля - вывести [N / A]
или пустоту.
Я так понял, в модели можно создать свойство: public string AgeToString { get => Age <= 0 ? "[N / A]" : $"{Age} лет" }
и указать его в Binding
.
Но это ведь так не делается по-нормальному, для разных вариантов вывода отдельное свойство создавать?