обновление изображения из дочерней панели wpf
Не могу обновить изображение через MVVM.
WPF изучаю от силы 4 дня.
Часть кода формы:
<Ellipse Height="200" Width="200" Margin="8,10,8,349">
<Ellipse.Fill>
<ImageBrush x:Name="usprof" Stretch="UniformToFill" ImageSource="{Binding CurrentAvatar}"/>
</Ellipse.Fill>
MVVM:
public RelayCommand ChangeAvatarCommand { get; set; }
private object? _currentAvatar;
public object? CurrentAvatar
{
get { return _currentAvatar; }
set { _currentAvatar = value; OnPropertyChanged(); }
}
public MainViewModel()
{
ChangeAvatarCommand = new RelayCommand(o =>
{
CurrentAvatar = UserData.AvatarPath; // Код срабатывает, но изображение не меняется
});
}
UPD:
Если необходимо, то вот код кнопки из другой панели:
<Button x:Name="selectBtn" Command="{Binding ChangeAvatarCommand}" Click="selectBtn_Click" Content="Select" VerticalAlignment="Center" Foreground="White" FontSize="15" Margin="10 0 0 0" Width="100" BorderThickness="0" Style="{StaticResource stdButton}"/>
Также в отдельном StackPanel
Выбор изображения по кнопке:
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "PNG files(*.png)|*.png|JPG files(*.jpg)|*.jpg|All files(*.*)|*.*";
if (ofd.ShowDialog().Value)
{
avatarPath.Text = ofd.FileName;
UserData.AvatarPath = ofd.FileName;
}
OnPropertyChanged
:
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged([CallerMemberName] string? name = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
}
RelayCommand
:
class RelayCommand : ICommand
{
private Action<object> _execute;
private Func<object, bool> _canExecute;
public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
public RelayCommand(Action<object> execute, Func<object, bool> canExecute = null)
{
_execute = execute;
_canExecute = canExecute;
}
public bool CanExecute(object parameter)
{
return _canExecute == null || _canExecute(parameter);
}
public void Execute(object parameter) { _execute(parameter); }
}
Источник: Stack Overflow на русском