PropertyChanged для свойства индексатора

У меня не было никакого успеха в решении заголовка - они никогда не были получены в моем методе ajaxSuccess / ajaxComplete. Я использовал ответ Штега с пользовательским ответом, но я немного изменил сторону JS. Я настраиваю метод, который я вызываю в каждой функции, поэтому я могу использовать стандартные методы $.get и $.post.

function handleAjaxResponse(data, callback) {
    //Try to convert and parse object
    try {
        if (jQuery.type(data) === "string") {
            data = jQuery.parseJSON(data);
        }
        if (data.error) {
            if (data.error == 'login') {
                window.location.reload();
                return;
            }
            else if (data.error.length > 0) {
                alert(data.error);
                return;
            }
        }
    }
    catch(ex) { }

    if (callback) {
        callback(data);
    }
}

Пример использования в нем ...

function submitAjaxForm(form, url, action) {
    //Lock form
    form.find('.ajax-submit').hide();
    form.find('.loader').show();

    $.post(url, form.serialize(), function (d) {
        //Unlock form
        form.find('.ajax-submit').show();
        form.find('.loader').hide();

        handleAjaxResponse(d, function (data) {
            // ... more code for if auth passes ...
        });
    });
    return false;
}
33
задан Inferis 18 March 2009 в 10:17
поделиться

2 ответа

Согласно эта запись в блоге , необходимо использовать "Item[]". Причем объект является названием свойства, сгенерированного компилятором при использовании индексатора.

, Если Вы хотите быть явными, можно украсить свойство индексатора атрибут IndexerName.

, Который заставил бы код быть похожим:

public class IndexerProvider : INotifyPropertyChanged {

    [IndexerName ("Item")]
    public object this [string key] {
        get {
            return ...;
        }
        set {
            ... = value;
            FirePropertyChanged ("Item[]");
        }
    }
}

, По крайней мере, это делает намерение более ясным. Я не предлагаю, чтобы Вы изменили имя индексатора, хотя, если бы Ваш приятель нашел строку "Item[]" твердой кодированный, это, вероятно, означает, что WPF не был бы в состоянии иметь дело с другим именем индексатора.

46
ответ дан 27 November 2019 в 18:00
поделиться

На самом деле, я считаю, что установка атрибута IndexerName в значение "Item" является излишней. Атрибут IndexerName специально предназначен для переименования индекса, если вы хотите дать его элементу коллекции другое имя. Таким образом, ваш код может выглядеть примерно так:

public class IndexerProvider : INotifyPropertyChanged {

    [IndexerName("myIndexItem")]
    public object this [string key] {
        get {
            return ...;
        }
        set {
            ... = value;
            FirePropertyChanged ("myIndexItem[]");
        }
    }
}

После того, как вы установите имя индексатора в любое нужное вам значение, вы можете использовать его в событии FirePropertyChanged.

5
ответ дан 27 November 2019 в 18:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: