Привязка к классу Не работает [дубликат]

Это полезно для социального взаимодействия.

while (Date != "January 1st"):
    time.sleep(1)
else:
    print("Happy new year!")
1
задан GrowSing 5 January 2016 в 17:45
поделиться

2 ответа

Вы создаете два экземпляра вашего класса MainWindowsViewModel: один в XAML с помощью

<Window.DataContext>
    <VM:MainWindowsViewModel />
</Window.DataContext>

и один в коде позади

MainWindowsViewModel _view = new MainWindowsViewModel();

. Таким образом, ваш код заставляет свойство на другом экземпляре модели представлений, чем тот, к которому привязан вид.

Измените свой код следующим образом:

var viewModel = (MainWindowsViewModel)DataContext;
viewModel.StatusImage = new BitmapImage(...);
3
ответ дан Clemens 18 August 2018 в 18:11
поделиться
  • 1
    Я думаю, что это всего лишь пример, но не настоящий код. Я надеюсь. – Vadim Martynov 5 January 2016 в 17:56
  • 2
    Вы имеете в виду вопрос? Это, безусловно, настоящий код, а также распространенная ошибка. Я часто это видел в StackOverflow. – Clemens 5 January 2016 в 17:58
  • 3
    Должно работать что-то вроде Application.Current.MainWindow.DataContext, но лучше было бы не создавать экземпляр модели представления в XAML и вместо этого создавать глобально доступный экземпляр в вашем коде, то есть в классе App. – Clemens 5 January 2016 в 18:30
  • 4
    Боже, я тупой. Но как я могу получить этот экземпляр viewModel из другого класса? Как MainWindow.DataContex .. или что-то.? – GrowSing 5 January 2016 в 18:31
  • 5
    Спасибо, это работает. – GrowSing 5 January 2016 в 18:37

Я не обнаружил никаких проблем с вашим кодом, но вы можете проверить несколько вещей.

  1. Убедитесь, что ваше изображение добавлено в проект и задано действие сборки изображений в Content ( копировать, если новый).
  2. Перед обновлением вызова ImageSource метод Freeze для предотвращения ошибки: «Должен создать DependencySource в том же потоке, что и DependencyObject»
    var yourImage = new BitmapImage(new Uri(String.Format("Sources/{0}.png", "red"), UriKind.Relative));
    yourImage.Freeze();
    _view.StatusImage = yourImage;
    

. Кроме того, это более простой способ привязки изображения в WPF. Вы можете использовать строку в качестве источника и задать путь ресурса к привязанному свойству:

public string StatusImage  
{
    get { return "/AssemblyName;component/Sources/red.png"; }
}
-1
ответ дан Vadim Martynov 18 August 2018 в 18:11
поделиться
Другие вопросы по тегам:

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