WPF много одинаковых событий при просмотре рендеринга - PullRequest
0 голосов
/ 25 апреля 2018

У меня есть вопрос, у меня есть вид, и с этой точки зрения у меня есть поле со списком:

<ComboBox ItemsSource="{Binding ProjectsBrowserAxmModules}" SelectedValuePath="AxmModuleId" DisplayMemberPath="AxmModuleName"  
    SelectedValue="{Binding SelectedAxmModule, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
    controls:TextBoxHelper.Watermark="{Binding BrowserComboBoxWatermark}" Height="2" IsSynchronizedWithCurrentItem="True"
    SelectionChanged="ComboBox_CurrentBrowserAxmChanged" >

И так выглядит событие:

private void ComboBox_CurrentBrowserAxmChanged(object sender, RoutedEventArgs e)
{  
((CurrentsHistoryViewModel)DataContext).GetCurrentsModuleCommand.Execute(sender);
}

И каждый раз, когда я меняю представление на другое, и обратно к этому представлению выглядит, как будто это событие регистрируется заново, поэтому, например, если я перехожу к другому представлению, возвращаюсь и возвращаюсь к другому представлению, и снова это событие срабатывает 4 раза.

Я пытался

Loaded -= ComboBox_CurrentBrowserAxmChanged;

Но не повезло, есть ли способ отменить эти избыточные события.

1 Ответ

0 голосов
/ 25 апреля 2018

Полагаю, свойство SelectedValue в поле со списком изменяется каким-либо образом, и внутренне оно вызывает событие изменения выбранного списка со списком.иметь точку отладчика в установщике свойства SelectedAxmModule.надеюсь, вы обнаружите, что данное свойство срабатывает при переключении экранов.

Я предлагаю удалить событие selectionChanged.и используйте событие / делегат для той же цели.

Фрагмент кода:

public class AxmModule: NotifierModel
    {
    public static event MyEventHandler ValueChanges;
            public delegate void MyEventHandler(string Value);
         private string _selectedAxmModule ;
            public string SelectedAxmModule 
            {
                get
                {
                    return _selectedAxmModule ;
                }
                set
                {
                    _selectedAxmModule = value;
                    if (ValueChanged!= null)
                    {
                        ValueChanged(_selectedAxmModule );
                        RaisePropertyChanged("SelectedAxmModule ");
                    }
                }
            }
}

Зарегистрируйте его в своем представлении Код позади / viewmodel

   AxmModule.ValueChanged+= AxmModule_ValueChanged;

  public void AxmModule_ValueChanged(string value)
        {
     // your code
        }

Надеюсь, это разрешитваша проблема.

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