【发布时间】:2011-01-07 00:33:18
【问题描述】:
在我的场景中,我有一个 MainView + MainViewModel、UserControl1 + UserControl 2。 在 MainView 中,我有 2 个按钮标记为:Button_ShowUserControl1 + Button_ShowUserControl2。 在 MainView 的下部,我有一个“ContentGrid”,它采用/should_take... 每个 UserControl。
我的目标:
当 Button_ShowUserControl1 被点击时 UserControl1 是 Visible 并且 UserControl2 OR 任何其他 UserControl 必须设置为 折叠。同样适用于 Button_ShowUserControl2。
我的问题:
1.) 由于用户控件应在应用程序启动时加载,我如何将它们全部放在一个“ContentGrid”中?这实际上是不可能的......那么我怎样才能让一个 UserControl 可见而另一个在同一个地方/“ContentGrid”刚刚折叠?
2.) 如 1.) 似乎不可能我如何在应用程序启动时实例化所有 UserControl,并在单击相应按钮时使它们仅可见/折叠?
3.) 由于 UserControl 具有属性 Visibility = Visible/Hidden/Collapsed,我如何绑定到 ViewModel 中的属性返回像 Collapsed 这样的值?我只能得到像 Visibility = false/true 这样的布尔值?
我的测试代码:
<Grid x:Name="LayoutRoot" Background="#FFBDF5BD" ShowGridLines="False">
<Grid.RowDefinitions>
<RowDefinition Height="96*" />
<RowDefinition Height="289*" />
</Grid.RowDefinitions>
<Grid HorizontalAlignment="Stretch" Name="MenuGrid" VerticalAlignment="Stretch" Background="#FFCECEFF">
<StackPanel Name="stackPanel1" Background="#FFEDFF00" Orientation="Horizontal">
<Button Content="User Data 1" Height="35" Name="button1" Command="{Binding Path=ShowUserControl1Command}" Width="150" Margin="100,0,0,0" />
<Button Content="User Data 2" Height="35" Name="button2" Width="150" Margin="100,0,0,0" />
</StackPanel>
</Grid>
<Grid Grid.Row="1" HorizontalAlignment="Stretch" Name="ContentGrid" VerticalAlignment="Stretch" Background="#FFB15454" />
</Grid>
<UserControl x:Class="SwapUserControls.MVVM.UserControl2"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:vm="clr-namespace:SwapUserControls.MVVM.ViewModel"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300" Visibility="{Binding IsUserControl1Collapsed, Path=Value}">
<UserControl.Resources>
<vm:MainViewModel x:Key="MainViewModelID" />
</UserControl.Resources>
<UserControl.DataContext>
<Binding Source="{StaticResource MainViewModelID}" />
</UserControl.DataContext>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="228*" />
<RowDefinition Height="72*" />
</Grid.RowDefinitions>
<Button Content="UserControl2" Grid.Row="1" Height="23" HorizontalAlignment="Left" Margin="112,27,0,0" Name="button1" VerticalAlignment="Top" Width="75" />
<DataGrid HorizontalAlignment="Stretch" Name="dataGrid1" VerticalAlignment="Stretch" Background="#FFC046F8" />
</Grid>
public class MainViewModel : ViewModelBase
{
RelayCommand _ShowUserControl1Command;
private bool _IsUserControl1Collapsed;
public RelayCommand ShowUserControl1Command
{
get
{
if (_ShowUserControl1Command == null)
{
_ShowUserControl1Command = new RelayCommand( () => ShowUserControl1() );
}
return _ShowUserControl1Command;
}
}
public void ShowUserControl1()
{
_IsUserControl1Collapsed = true;
}
public bool IsUserControl1Collapsed
{
get
{
return _IsUserControl1Collapsed;
}
}
}
是的,代码是错误的,所以我在这里问:)
【问题讨论】:
-
当你说不可能的事情时,它会有点混乱......试着坚持你的目标......当我遇到问题时,我有点迷失了,因为我试图解释它们的含义。我认为它们无关紧要并着手解决您的目标,但如果我错了,请纠正我。
标签: mvvm user-controls collapse