WPF Уведомлять об изменениях на объекте - PullRequest
0 голосов
/ 27 мая 2010

У меня есть gridview, где я определяю некоторые столбцы, например так ...

<GridViewColumn.CellTemplate>
    <DataTemplate>
        <TextBlock Text="{Binding MyProp}" />
    </DataTemplate>
</GridViewColumn.CellTemplate>

Я связываю свой gridview с коллекцией и реализует INotifyPropertyChanged в свойстве MyProp.Это работает хорошо, и любые изменения MyProp отражаются в виде сетки.

Если я добавлю еще один столбец, связанный с самим объектом, я не получу никаких уведомлений / обновлений.Мой код ...

<GridViewColumn.CellTemplate>
    <DataTemplate>
        <TextBlock Text="{Binding Converter={StaticResource myConverter}}"/>
    </DataTemplate>
</GridViewColumn.CellTemplate>

Я думаю, что мне нужно что-то вроде INotifyPropertyChanged для объекта, но я не знаю, как это сделать.Есть предложения?

Ответы [ 2 ]

5 голосов
/ 27 мая 2010

Да, сам фактический экземпляр никогда не меняется - только его свойства.

Предположительно, ваш конвертер опирается на набор свойств объекта, к которому вы привязаны? Если это так, вы можете использовать MultiBinding и изменить свой конвертер на IMultiValueConverter. Затем вы можете связать все зависимые свойства, которые могут привести к обновлению TextBlock.

0 голосов
/ 27 мая 2010

Сделать объект объектным интерфейсом INotifyPropertyChanged

Вот пример из MSDN

public class DemoCustomer : INotifyPropertyChanged
{
// These fields hold the values for the public properties.
private Guid idValue = Guid.NewGuid();
private string customerName = String.Empty;
private string companyNameValue = String.Empty;
private string phoneNumberValue = String.Empty;

public event PropertyChangedEventHandler PropertyChanged;

private void NotifyPropertyChanged(String info)
{
    if (PropertyChanged != null)
    {
        PropertyChanged(this, new PropertyChangedEventArgs(info));
    }
}

// The constructor is private to enforce the factory pattern.
private DemoCustomer()
{
    customerName = "no data";
    companyNameValue = "no data";
    phoneNumberValue = "no data";
}

// This is the public factory method.
public static DemoCustomer CreateNewCustomer()
{
    return new DemoCustomer();
}

// This property represents an ID, suitable
// for use as a primary key in a database.
public Guid ID
{
    get
    {
        return this.idValue;
    }
}

public string CompanyName
{
    get {return this.companyNameValue;}

    set
    {
        if (value != this.companyNameValue)
        {
            this.companyNameValue = value;
            NotifyPropertyChanged("CompanyName");
        }
    }
}
public string PhoneNumber
{
    get { return this.phoneNumberValue; }

    set 
    {
        if (value != this.phoneNumberValue)
        {
            this.phoneNumberValue = value;
            NotifyPropertyChanged("PhoneNumber");
        }
    }
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...