WPF Button DataTrigger не обновляет содержимое при изменении свойстваC#

Место общения программистов C#
Ответить
Anonymous
 WPF Button DataTrigger не обновляет содержимое при изменении свойства

Сообщение Anonymous »

Я работаю над приложением базы данных фильмов WPF для школьного проекта, и у меня есть кнопка, с помощью которой я хочу переключать содержимое кнопки на основе логического свойства IsFavorite объекта SelectedFilm. Если IsFavorite имеет значение true, на кнопке должно отображаться «Удалить из избранного». Если IsFavorite имеет значение false, на кнопке должно отображаться «Добавить в избранное».
Я поместил текстовый блок просто для того, чтобы проверить, есть ли свойство и привязка работают, и работают нормально (оно меняется с true на false, если я нажимаю кнопку)
Несмотря на правильное изменение свойства, кнопка не обновляет свое содержание.
Будем благодарны за любую помощь.
MainWindow.xaml


























MainWindow.xaml.cs
public MainWindow()
{
InitializeComponent();
DataContext = new ViewModel();
}

private void ToggleFavorite_Click(object sender, RoutedEventArgs e)
{
if (DataContext is ViewModel viewModel && viewModel.SelectedFilm != null)
{
viewModel.SelectedFilm.IsFavorite = !viewModel.SelectedFilm.IsFavorite;
}
}


ViewModel.cs
public class ViewModel : INotifyPropertyChanged
{
private Film _selectedFilm;
public Film SelectedFilm
{
get => _selectedFilm;
set
{
_selectedFilm = value;
OnPropertyChanged(nameof(SelectedFilm));
}
}

public ICommand ToggleFavoriteCommand { get; }

public ViewModel()
{
ToggleFavoriteCommand = new RelayCommand(ToggleFavorite, () => SelectedFilm != null);
}

private void ToggleFavorite()
{
if (SelectedFilm != null)
{
SelectedFilm.IsFavorite = !SelectedFilm.IsFavorite;

OnPropertyChanged(nameof(SelectedFilm));
OnPropertyChanged(nameof(SelectedFilm.IsFavorite));

if (SelectedGenre == "Favorites")
{
FilteredFilms.Refresh();
}
}
}

public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propertyName) => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}


Film.cs
public class Film : INotifyPropertyChanged
{
private bool _isFavorite;
public bool IsFavorite
{
get => _isFavorite;
set
{
if (_isFavorite != value)
{
_isFavorite = value;
OnPropertyChanged(nameof(IsFavorite));
}
}
}

public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propertyName) => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}



Подробнее здесь: https://stackoverflow.com/questions/791 ... ty-changes
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»