Событие WinUi 3 PropertyChanged не срабатывает/обновляется. ФлажокC#

Место общения программистов C#
Ответить
Anonymous
 Событие WinUi 3 PropertyChanged не срабатывает/обновляется. Флажок

Сообщение Anonymous »

Я работаю над этой ошибкой в ​​приложении Winui 3. Как вы можете видеть в следующем примере кода, когда вы устанавливаете/снимаете флажок с «DefaultProgramCheckBox», вызывается SetValue переменной «DefaultProgram», но событие PropertyChanged не запускается и не фиксируется ProcessPropertyChanged() в ViewModel, есть идеи, что такое основная причина этой проблемы. Спасибо.
Вот флажок в пользовательском интерфейсе. (Страница).


Вот код в ViewModel.cs
//Main model
[ObservableProperty]
private ProgramWrapper _desktopWrapper = new(new Program());

public ViewModel()
{
LoadAsync();

PropertyChanged += ProcessPropertyChanged;
DesktopWrapper.PropertyChanged += ProcessPropertyChanged;

}

private void ProcessPropertyChanged(object sender, PropertyChangedEventArgs e)
{
//PropertyChangedEvent not captured here when check/uncheck the checkbox
if (e.PropertyName == nameof(DesktopWrapper.DefaultProgram))
ShowDefaultProgramMessage();
}
< /code>
вот программа workwrapper.cs: < /p>
public class ProgramWrapper : ModelWrapper
{
public ProgramWrapper(Program model) : base(model)
{

}

public bool DefaultProgram
{
get { return GetValue(); }
set { SetValue(value); } //When check/check the checkbox, SetValue is called.
}
}

Вот Modelwrapper.cs:
public class ModelWrapper : NotifyDataErrorsInfoBase
{
public T Model { get; set; }
public ModelWrapper(T model)
{
Model = model;
}

protected virtual TValue GetValue(
[CallerMemberName] string propertyName = null)
{
return (TValue)typeof(T).GetProperty(propertyName).GetValue(Model);
}

protected virtual void SetValue(
TValue value,
[CallerMemberName] string propertyName = null)
{
typeof(T).GetProperty(propertyName).SetValue(Model, value);
OnPropertyChanged(propertyName);
ValidatePropertyInternal(propertyName, value);
}

private void ValidatePropertyInternal(string propertyName, object currentValue)
{
ClearErrors(propertyName);

ValidateDataAnnotations(propertyName, currentValue);

ValidateCustomErrors(propertyName);
}

private void ValidateCustomErrors(string propertyName)
{
var errors = ValidateProperty(propertyName);
if (errors != null)
{
foreach (var error in errors)
{
AddError(propertyName, error);
}
}
}

private void ValidateDataAnnotations(string propertyName, object currentValue)
{
var context = new ValidationContext(Model) { MemberName = propertyName };
var results = new List();

Validator.TryValidateProperty(currentValue, context, results);

foreach (var result in results)
{
AddError(propertyName, result.ErrorMessage);
}
}

protected virtual IEnumerable ValidateProperty(string propertyName)
{
return null;
}
}


Подробнее здесь: https://stackoverflow.com/questions/793 ... g-checkbox
Ответить

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

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

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

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

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