我有一个listview,在鼠标进入特定列时,我尝试通过在MyAction2()函数中将isOpen设置为true来启动viewmodel类中的弹出窗口,当用户在listview列上输入鼠标时会调用该函数。 / p>
我观察到当鼠标进入该列时。它调用我的函数(ViewModel中的MyAction2()函数,参见下面的代码),但即使在MyAction2()中将isopen变量设置为true,set-get也是如此。绑定的方法是打开不被调用。现在我觉得绑定有问题。通常应该是正确的我觉得有些东西丢失但我不知道是什么。
My Xaml(包含teh opup和ListView中的列,在鼠标输入中调用ViewModel中名为MyAction2()的事件):
<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>
ViewModel.cs
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;
}
什么是错的,哪里出错了?
答案 0 :(得分:0)
您应该设置 P opupLaunched 属性,而不是设置要调用的setter的popUpLaunched字段以及要引发的PropertyChanged事件:
private void MyAction2(object param)
{
PopUpLaunched = true;
}
答案 1 :(得分:0)
为了实现这样的绑定,您可以将该属性设为Dependency属性,如此
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); }
}
如果您不在MainPage上工作,请分别更改该typeof(MainPage)参数。并根据您的需要调整吸气剂和定型剂。