У меня есть ViewModel , которая выполняет некоторые функции. Функции запускаются по кнопке, у меня есть команда по нажатию кнопки.
ViewModel.cs
class WindowViewModel : INotifyPropertyChanged
{
public WindowViewModel()
{
canExecute = true;
}
public ICommand ApplyKMMCommand //command for button click, works great, tested
{
get
{
return applyKMMCommand ?? (applyKMMCommand = new Commands.CommandHandler(() =>
ApplyKMMToNewImage(), canExecute));
}
}
private bool canExecute;
private ICommand applyKMMCommand;
public void ApplyKMMToNewImage()
{
ApplyKMM.Init(); //algorithm name
}
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
public BitmapImage DisplayedImage //displaying image that i work with
{
get { return Bitmaps.Filepath; }
set { Bitmaps.Filepath = value; NotifyPropertyChanged(nameof(DisplayedImage)); }
}
}
Теперь мой ApplyKMM.Init()
class ApplyKMM
{
public static void Init()
{
Bitmaps.Filepath = //do some thing with it...
}
}
И мой Models.Bitmaps.cs
static public BitmapImage Filepath
{
get { return filepath; }
set { filepath = value; }
}
static private BitmapImage filepath{ get; set; }
Проблема в том, что, когда я задаю ApplyKMM.Init
, элемент управления Image
, который связан для просмотра, не меняет свое значение.
Без ApplyKMM
я могу сделать во ViewModel эту вещь:
DisplayedImage = //do things with bitmap...
И затем, Image
, который представлен в виде изменения (после создания объектов с этим изображением).
Можете ли вы сказать мне, как уведомить ViewModel, что где-то в коде filepath
из Моделей изменилось?
EDIT:
Связывание в View
Похоже на стандартное связывание:
<Image Source="{Binding DisplayedImage}"/>
Нажатие кнопки тоже работает, у меня проблема только со связью между Models->ApplyKMM->ViewModel
EDIT2:
Свойства Filepath
- это хранилище в папке Models
, а не папка, в которой находится функция ApplyKMM
. Загляни в мою правку, я пытаюсь сделать что-то вроде:
Models -> ApplyKMM -> ViewModel
. Из моделей я получаю Filepath
. Затем я использую функцию ApplyKMM
, которая находится в другом пространстве имен. Затем, после работы с растровым изображением с ApplyKMM
func, я хочу как-то уведомить ViewModel
, что работа над Model
завершена (например, преобразовать в оттенки серого), и я хочу показать это изображение в градациях серого в VM. Это работает, когда я хочу сделать Model -> ViewModel
(ApplyKMM
в классе VM), но я хочу отойти ApplyKMM
от ViewModel
. И это, когда у меня начинается старое.