Всплывающее привязка не сделано правильно

У меня есть listview, который при вводе мыши в определенный столбец, я пытаюсь запустить всплывающее окно в классе viewmodel, установив isOpen в true в функции MyAction2 (), которая вызывается, когда пользователь вводит мышь в этот столбец listview.

Я замечаю, что когда мышь-введите в эту колонку.Он вызывает функцию my function (MyAction2 () function in ViewModel, см. код, написанный ниже), но даже при установке переменной isopen в значение true в MyAction2 () метод set-get привязанного isOpen не вызывается. Теперь я чувствую, что есть проблема в связывании. Который обычно должен быть правильным, я чувствую, что какая-то вещь отсутствует, но я не знаю, что.

My Xaml (содержащий Teh opup и столбец в ListView, который на вводе мыши вызывает событие MyAction2 () в ViewModel):

<Grid>
    <StackPanel>           
        <Popup Margin="10,10,0,13" Name="Popup1" IsOpen="{Binding PopUpLaunched,Mode=TwoWay}" Placement="Top" PopupAnimation="Fade" StaysOpen="True" HorizontalAlignment="Left" VerticalAlignment="Top" Width="194" Height="200" MinWidth="500" MinHeight="500">
            <StackPanel>
                <Border Background="Red">
                    <TextBlock Name="McTextBlock" Background="LightBlue"> This is popup text </TextBlock>
                </Border>
            </StackPanel>
        </Popup>
    </StackPanel>
</Grid>

модель представления.цезий

private bool popUpLaunched;
public bool PopUpLaunched {
    get {
        return popUpLaunched;
    } //Get set never gets called even after the popUpLaunched=true in the MyAction2() call
    set {
        popUpLaunched = value;
        OnPropertyChanged("PopUpLaunched");
    }
}

private void MyAction2(object param) //The function which gets called on mouse event but do not pop ups the popup
    {
        popUpLaunched = true;
    }

Что неправильно и где неправильно ?

2 ответа

  1. Следует установить свойство p opupLaunched вместо установки поля popUpLaunched для вызываемого задатчика и вызываемого события PropertyChanged:

    private void MyAction2(object param)
    {
        PopUpLaunched = true;
    }
    
  2. Для реализации такой привязки можно сделать это свойство свойством зависимостей, как это

    public static readonly DependencyProperty PopUpLaunched = DependencyProperty.Register(
        "popUpLaunched", typeof(bool), typeof(MainPage), new PropertyMetadata(null));
    
            public bool popUpLaunched
            {
                get { return (bool)GetValue(PopUpLaunched); }
                set { SetValue(PopUpLaunched, value); }
            }
    

    Если вы не работаете на главной странице, измените аргумент typeof (MainPage) соответственно. И отрегулируйте геттер и сеттер для ваших потребностей.