【发布时间】:2015-03-30 03:14:52
【问题描述】:
我是 MVVM 的新手,我正在开发一个 WP8 应用程序,我希望能够根据点击其中一个按钮的时间来设置按钮和文本块的可见性。这是我的观点,试图更好地解释我的问题; (http://i.imgur.com/JvrxBkh.png - 无法在此声誉上发布图片)。
当用户点击“要睡觉”按钮时,我希望计数器文本块和“我醒了”按钮可见,而“要睡觉”按钮折叠起来。一旦按下“我醒了”按钮等,它就会以另一种方式工作。如果我没有使用 MVVM,我只需在按钮事件中设置 Visibility 值,但我被困在如何在使用 MVVM 模式时执行此操作。
我环顾四周,发现了一个使用转换器的解决方案,例如使用 BooleanToVisibilityConverter 类和 bool 属性,然后通过绑定到 ViewModel 中的 bool 值并将转换器值设置为StaticResource BooleanToVisibilityConverter。但它只是不适合我想要的方式。然后我的计数器文本块已经从 ViewModel 绑定了,所以我需要为这个文本块进行某种多重绑定吗?
希望我已经解释清楚了。看起来这应该是一个简单的任务,也许我只是想多了。
用一些代码sn-ps编辑
我所指的 View 组件;
<BooleanToVisibilityConverter x:Key="boolToVis" />
<TextBlock
Grid.Row="2"
Text="{Binding Counter}"
FontSize="50"
TextWrapping="Wrap"
Foreground="White"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Visibility="{Binding VisibilityControl, Converter={StaticResource boolToVis}}"/>
<Button
Grid.Row="3"
Width="230"
Height="70"
Content="I'm awake"
BorderThickness="0"
Background="Gray"
Margin="0,20,0,0"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Command="{Binding AwakeButtonCommand}"
Visibility="{Binding VisibilityControl, Converter={StaticResource boolToVis}}""/>
<Button
Grid.Row="3"
Width="230"
Height="70"
Content="Going to sleep"
BorderThickness="0"
Background="Gray"
Margin="0,20,0,0"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Command="{Binding SleepButtonCommand}"
Visibility="{Binding VisibilityControl, Converter={StaticResource boolToVis}}"/>
那么在ViewModel中VisibilityControl就是;
private bool _visibilityControl;
public bool VisibilityControl
{
if (_visibilityControl != value)
_visibilityControl = value;
OnPropertyChanged("VisibilityControl");
}
我有两个按钮,例如(我只会发布一个);
public ICommand AwakeButtonCommand
{
get
{
return _awakeButtonCommand
?? (_awakeButtonCommand = new Resources.ActionCommand(() =>
{
VisibilityControl = true;
}));
}
}
显然,它不起作用。我认为让我失望的是因为我想在按下一个按钮时改变几件事,等等。这让我失望。
【问题讨论】:
-
你能发布一些你已经尝试过的代码吗?布尔属性结合
BooleanToVisibilityConverter绝对是 MVVM 做这种事情的方式。您基本上使用布尔属性状态来显示和隐藏 UI 的元素。 -
我已经发布了答案,但查看您的代码仍然很有用。
-
是的,抱歉,没想到它对任何人都有用。我现在已经编辑了。
标签: c# windows-phone-8 mvvm visibility ivalueconverter