コンボボックスでユーザーが選択した内容に基づいてウィンドウのレイアウトを変更する必要があります。私は片方の方法で刺すようにしましたが、それは頑丈で、ハッキングされているように感じます。 Imは、きれいなMVVMソリューションでなければならないと確信しています。WPF MVVMを使用したコンボボックス選択によるウィンドウレイアウトの変更
私のグループボックスに複数のドッキングパネルを配置する場所を考えています。可視性が崩壊するように設定されています。選択が行われると、適切なドックパネルが表示可能に設定されます。私はビューモデル内でこれを成功させる方法を見つけようとしました。私はまた、私の試みが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が必要です - https://msdn.microsoft.com/en-us/library/system.windows.controls.booleantovisibilityconverter(v=vs.110).aspx、その他のSOの質問もありますboolを可視性に変換します。 – Dhanashree