На изменение собственности - PullRequest
0 голосов
/ 08 октября 2019

При изменении поля со списком со значениями 1 -5 на внешнем интерфейсе событие onpropertychange запускает метод, который создает экземпляр коллекции Viewmodel, которая отражает значение комбинированного списка. Поле со списком также обрабатывает некоторое поведение пользовательского интерфейса в коде, когда изменяется выбор, который обрабатывает показ и скрытие некоторых элементов управления. Проблема, когда значение раскрывающегося списка загружается из базы данных через модель, при которой возникает событие изменения свойства onproperty, но оно не имеет обработчика и поэтому игнорируется. Тем не менее, код за частью действительно срабатывает, и на экране отображаются правильные элементы управления. Как я могу убедиться, что это событие происходит, когда значение элемента управления изменяется данными, а не пользователем?

private void MethodInformationViewModel_PropertyChanged(object sender, 
System.ComponentModel.PropertyChangedEventArgs e)
    {
        if (e.PropertyName == "NumberOfTests")
        {

            ManageRunDialogues();
        }
    }

XAML

<ComboBox x:Name="CB_NumberOfTests" Grid.Column="16" Grid.Row="4" 
Grid.ColumnSpan="2" SelectionChanged="CB_NumberOfTests_SelectionChanged" 
SelectedValue="{Binding 
vmcTPMViewModel.MethodInformationViewModel.NumberOfTests, Mode=TwoWay}">
                        <sys:Int32>1</sys:Int32>
                        <sys:Int32>2</sys:Int32>
                        <sys:Int32>3</sys:Int32>
                        <sys:Int32>4</sys:Int32>
                        <sys:Int32>5</sys:Int32>
                    </ComboBox>

Я ожидаю, что любое изменение свойства NumberOfTests вызовет событие onpropertychenge. Это верно, но когда свойство изменяется, когда вызов базы данных заполняет модель в конструкторе модели, обработчик отсутствует, и событие изменения не запускается, и поэтому вызов метода ManageRunDialogues () не происходит. Что я могу сделать?

1 Ответ

0 голосов
/ 08 октября 2019

Если вы используете шаблон MVVM, не используйте событие SelectionChanged для каких-либо изменений ViewModel. Сохраните его только для изменений графического интерфейса, если это необходимо. (Т.е. цвет фона, высота, ширина ...)

Все изменения уровня ViewModel при изменении выделения можно перейти к установщику свойства NumberOfTests.

private int _numberOfTests ;
public int NumberOfTests 
{
    get { return _numberOfTests; }
    set
    {
        _numberOfTests = value;
        pqr();   // Your extra operations that run when any one changes NumberOfTests
        OnPropertyChanged();
    }
}

Если вам нужночтобы выполнить дополнительные операции перед изменением свойств модели представления, (только из бэкэнда) я бы рекомендовал использовать дополнительную функцию установки.

public void UpdateNumberOfTests(int value)
{
    NumberOfTests = value;
    abc(); // Your extra operations that run only when back-end changes NumberOfTests.
}

Затем позвольте бэкэнду использовать эту функцию. Таким образом, ваш дополнительный код будет выполняться только в том случае, если серверная часть изменит NumberOfTests с помощью UpdateNumberOfTests (значение int).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...