Событие ObservableCollection PropertyChanged

У меня была та же проблема, и мне удалось ее решить.

Вы правильно сказали Cloudfront разрешить эти заголовки, но вы не добавили эти заголовки туда, где Cloudfront получает шрифт. Да, ваши исходные заголовки разрешены, но Heroku все равно не отправляет эти заголовки со шрифтом.

Чтобы это исправить, вам нужно добавить правильные заголовки CORS к шрифту на Heroku. К счастью, это довольно легко.

Сначала добавьте камень rack/cors в ваш проект. https://github.com/cyu/rack-cors

Затем настройте сервер Rack для загрузки и настройки CORS для любых ресурсов, которые он обслуживает. Добавьте следующее после предварительной загрузки приложения в config.ru

require 'rack/cors'
use Rack::Cors do
  allow do
    origins '*'

    resource '/cors',
      :headers => :any,
      :methods => [:post],
      :credentials => true,
      :max_age => 0

    resource '*',
      :headers => :any,
      :methods => [:get, :post, :delete, :put, :patch, :options, :head],
      :max_age => 0
    end
  end

. Это устанавливает любые ресурсы, возвращаемые из Heroku, для применения соответствующих заголовков CORS. Вы можете ограничить применение заголовков в зависимости от вашего файла и требований безопасности.

После развертывания перейдите в Cloudfront и начните аннулирование всего, что ранее давало вам ошибку разрешения CORS. Теперь, когда Cloudfront загружает свежую копию из Heroku, у него будут правильные заголовки, и Cloudfront передаст эти заголовки клиенту, как ранее было настроено с вашими Origin разрешениями.

Чтобы убедиться, что вы обслуживаете правильные заголовки со своего сервера, вы можете использовать следующую команду curl для проверки ваших заголовков: curl -I -s -X GET -H "Origin: www.yoursite.com" http://www.yoursite.dev:5000/assets/fonts/myfont.svg

Вы должны увидеть возвращенные следующие заголовки:

Access-Control-Allow-Origin: www.yoursite.com
Access-Control-Allow-Methods: GET, POST, DELETE, PUT, PATCH, OPTIONS, HEAD
Access-Control-Max-Age: 0
Access-Control-Allow-Credentials: true

8
задан Askolein 1 March 2016 в 11:28
поделиться

2 ответа

SelectableList<int> intList = new SelectableList<int>();
((INotifyPropertyChanged)intList).PropertyChanged += 
    new PropertyChangedEventHandler(intList_Changed);

ObservableCollection явно реализует INotifyPropertyChanged , что означает, что вы должны привести экземпляр к интерфейсу, прежде чем вы сможете получить доступ к его методам, свойствам и событиям. Почему это делается, я не знаю. Расширение разметки привязки n не «знает» ObservableCollections или какой-либо другой тип. Он проверяет типы, чтобы увидеть, реализуют ли они или расширяют определенные интерфейсы / базовые классы (INPC, INCC, DependencyObject и т. Д.), И поэтому не заботится о том, реализован ли интерфейс явно.

11
ответ дан 5 December 2019 в 08:25
поделиться

Пользовательский интерфейс может получать и получает уведомление. Это ограничение ПРОСТО с ObservableCollection, которое определяет событие PropertyChanged как защищенное.

FWIW, я думаю, вам лучше оставить ObservableCollection в покое и просто добавить еще одно свойство к вашей виртуальной машине.

0
ответ дан 5 December 2019 в 08:25
поделиться
Другие вопросы по тегам:

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