Сбой смешивания с ObservableAsPropertyHelper

1

Microsoft Blend 2013 сбой сразу же, когда я пытаюсь загрузить решение WPF, разработанное в Visual Studio 2013. Получаемое (сокращенное) сообщение об ошибке: System.Exception: OnError произошел на объекте (обычно ObservableAsPropertyHelper), который сломал бы привязку или команду, Чтобы предотвратить это, подпишитесь на свойство ThrownExceptions ваших объектов ---> System.InvalidOperationException: в файле конфигурации приложения не может быть найдена строка с именем "RecipeModelContainer".

Приложение строит отлично и выполняется, когда я запускаю его. Перед тем, как эта конкретная проблема началась, Blend последовательно показывал сообщение о недостающей строке соединения; это сообщение возникло, когда я установил DataContext в свой код и остался с тех пор, как передал ссылку DataContext на мой XAML. В любом случае строка соединения определенно существует.

Я экспериментирую с ReactiveUI для разработки пользовательского элемента управления и использую свойство ObservableAsPropertyHelper. Вот свойство:

private ObservableAsPropertyHelper<IList<string>> _matches;
public IList<string> Matches
{
    get
    {
        return _matches.Value;
    }
}

... И вот связанный контент в моем конструкторе ViewModel:

var searchTerms = this.ObservableForProperty(x => x.IngredientFilter)
                   .Value()
                   .Throttle(TimeSpan.FromSeconds(0.2));
var searchResults = searchTerms.SelectMany(st => SearchIngredients(st));
_matches = searchResults.ToProperty(this, x => x.Matches);

Будучи относительно незнакомым с Reactive Extensions и путайте, почему Blend заботится о том, что есть в моем файле app.config, я не понимаю, как реализовать рекомендуемую обработку ошибок или иным образом справиться с этой проблемой. Я попробовал очистить мое решение, а также удалить файлы.suo. Какие-либо предложения?

Теги:
xaml
wpf
blend

1 ответ

1

Я определил два решения этой проблемы. Первый реализует обработку ThrownException в рекомендации сообщения об ошибке Blend:

_matches.ThrownExceptions.Subscribe(e => MessageBox.Show(e.Message));

Это запускает два окна MessageBox при запуске Blend, которые гласят: "Никакая строка соединения с именем RecipeModelContainer не может быть найдена в файле конфигурации приложения", но по крайней мере Blend не сбой.

Во-вторых, выясняется, что проблема возникла из-за нулевой задержки в моем методе async SearchIngredients, который в основном запрашивает объект Entity Framework DbContext для совпадений. Я добавил, что await Task.Delay(0) просто подделка асинхронного метода для searchTerms.SelectMany (приложение зависает, если метод не является асинхронным). Мне все еще не ясно, что это связано с файлом app.config, но проблема исчезает вообще, когда я перехожу к ненулевой задержке.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню