Привязка источника элементов управления не обновляется в веб-приложении ClickOnce, опубликованном в Интернете - PullRequest
0 голосов
/ 17 апреля 2020

У меня есть приложение WPF с окном XAML, содержащим несколько кнопок и DataGrid. Когда нажимаются кнопки, в фоновом режиме выполняется некоторая логика c, которая создает список какого-либо типа и, наконец, назначает список свойству модели (MVVM) «DataSource», с которым ItemSource DataGrid связан как:

<DataGrid x:Name="DataGrid" Grid.Row ="10" ...
          ItemsSource="{Binding Path=DataSource, Mode=TwoWay, NotifyOnSourceUpdated=True, NotifyOnTargetUpdated=True}">

Когда содержимое DataSource изменяется, DataGrid узнает об этом и показывает новые данные. Пока все хорошо, приложение работает как задумано и без проблем. Я могу скопировать вывод bin сборки и успешно запустить его повсюду.

Затем идет ClickOnce publi sh. Если опубликовано так, что оно устанавливается из общей папки Un c и устанавливается с нее, например, \ SomeServer \ SomePath \ InstallFromDir \, все по-прежнему работает нормально.

Но если опубликовано так, чтобы оно устанавливалось с и устанавливалось с онлайн-адреса, например, http://companydomain.com/InstallFromDir/, DataGrid просто не обновляется.

Ничего другого не изменится, кроме метод приложения и доступность обновлений от un c до сети.

То, что я собрал из точек трассировки отладки, все еще применяется. Список на заднем плане строится заново. Он присваивается свойству DataSource (если я проверяю содержащиеся в нем данные, оно содержит новые данные). Но если я получаю доступ к Источнику данных DataGrids, он все еще содержит OLD, исходные данные.

Я попытался переназначить DataSource для ItemsSource - не помогает. Я попытался повторно связать данные, когда они изменяются программно, например:

var sourceBinding = new System.Windows.Data.Binding
{
    Path = new PropertyPath("DataSource"),
    Mode = BindingMode.TwoWay,
    NotifyOnSourceUpdated = true,
    NotifyOnTargetUpdated = true
};
BindingOperations.SetBinding(((MainWindow)_window).DataGrid,
    System.Windows.Controls.DataGrid.ItemsSourceProperty, sourceBinding);

и даже изменить xaml так, чтобы он был связан ТОЛЬКО в коде:

<DataGrid x:Name="DataGrid" Grid.Row ="10" ... >

и он все еще работает так же, как описано выше: работает как прямое копирование или не c установка, но не работает как веб-установка.

Я полностью потерялся в поиске причины или поиске обходных путей. Кто-нибудь сталкивался с этим раньше? Любые идеи? Большое спасибо!

Обновление: Сначала я думал, что это проблема DataGrid, но с тех пор я также пытался заменить DataGrid на ListView, и он тоже не работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...