【发布时间】:2017-06-12 03:51:24
【问题描述】:
我需要根据用户在组合框中选择的内容来更改窗口的布局。我已经尝试过一种方法可能是什么,但感觉它很笨重并且被黑客攻击在一起。我确定他们必须是更清洁的 MVVM 解决方案。
我的想法是在我的 GroupBox 中有多个停靠面板,其可见性设置为折叠。做出选择后,相应的停靠面板将设置为可见。我试图在视图模型中找到一种方法,但没有成功。我也忍不住认为我的尝试违反了 MVVM。
XAML
<GroupBox Header="Options">
<Grid>
<DockPanel LastChildFill="False" x:Name="syncWellHeadersDockPanel" Visibility="Collapsed">
<Button DockPanel.Dock="Right" Content="Test"></Button>
</DockPanel>
<DockPanel LastChildFill="False" x:Name="SyncDirectionalSurveyDockPanel" Visibility="Collapsed">
<Button DockPanel.Dock="Left" Content="Test02"></Button>
</DockPanel>
</Grid>
</GroupBox>
ViewModel - 组合框选定项的属性
private StoredActionsModel _selectedStoredAction = DefaultStoredAction.ToList<StoredActionsModel>()[0];
public StoredActionsModel SelectedStoredAction
{
get { return _selectedStoredAction; }
set
{
if (value != _selectedStoredAction)
{
// Unset Selected on old value, if there was one
if (_selectedStoredAction != null)
{
_selectedStoredAction.Selected = false;
}
_selectedStoredAction = value;
// Set Selected on new value, if there is one
if (_selectedStoredAction != null)
{
_selectedStoredAction.Selected = true;
}
OnPropertyChanged("SelectedStoredAction");
if (_selectedStoredAction.StoredActionID == 4)
{
//X:SyncWellHeaderDockPanel.visibility = true?????
}
}
}
}
【问题讨论】:
-
你需要 bool 到可见性的转换器 - msdn.microsoft.com/en-us/library/… ,你也可以找到其他可以将 bool 转换为可见性的 SO 问题。