【发布时间】:2011-04-16 02:35:28
【问题描述】:
我正在使用 MVVM Light。我创建了一个如下所示的窗口:
<Window Name="MainWindow" ...>
<Window.Resources>
...
<viewModels:MainViewModel x:Key="mainVM" />
...
<BooleanToVisibilityConverter x:Key="visConv" />
...
</Window.Resources>
<Grid DataContext="{StaticResource mainVM}>
...
<Button Command="{Binding RaiseMyControl}" />
...
<my:MyUserControl Visibility="{Binding MyControlVisible,
Converter={StaticResource visConv}}" />
</Grid>
</Window>
所以基本上,MainViewModel 是窗口的视图模型类。它包含:
-
bool MyControlVisible绑定到MyUserControl的Visibility的属性 财产 -
RelayCommand RaiseMyControl命令的目的是设置MyControlVisible属性为true(默认为 false)。
单击窗口中的按钮会出现MyUserControl - 很简单。
MyUserControl 用户控件如下所示:
<UserControl ...>
<UserControl.Resources>
...
<viewModels:MyUserControlViewModel x:Key="userControlVM" />
...
</UserControl.Resources>
<Grid DataContext="{StaticResource userControlVM}>
...
<Border Width="200" Height="100" Background="Red">
<TextBlock Text="{Binding MyUserControlText}" />
</Border>
<!-- This border has a DataTrigger bound to "bool Fading" property of
the view model. When Fading is true, the border fades in through
an animation. When it is false, the border fades out. -->
...
<Button Command="{Binding CloseMyControl}" />
</Grid>
</UserControl>
同样,非常简单。 MyUserControlViewModel 是用户控件的视图模型类。它包含:
-
string MyUserControlText绑定到TextBlock的Text的属性 财产 -
bool Fading绑定到边框数据模板的属性,用于制作 边框淡入或淡出 -
RelayCommand CloseMyControl命令做了两件事: 1. 它设置Fading属性为false使边框淡出,2. 它设置Visibility用户控件的属性为Collapsed。
问题出在:只要将Visibility 设置为Collapsed,用户控件就会消失。我需要它先淡出然后再消失。我怎样才能让它发生?谢谢。
【问题讨论】: