Mic*_* D. 4 wpf user-controls conditional mvvm
在WPF我的MVVM应用程序中,我需要创建一个帐户搜索视图,其中包含2个选项,简单搜索帐户#或高级搜索(按名称,电子邮件等)
在我的AccountSearchViewModel中,我有一个bool属性IsAdvancedMode.
此外,我为每种模式创建了2个UserControl:SimpleSearchView和AdvancedSearchView
现在我需要根据IsAdvancedMode属性显示其中一个.
最好的方法是什么?
另外作为一般解决方案,如果我具有枚举的SearchMode属性.在这种情况下,你如何在多个控件之间切换?
我认为您需要使用Data Templating,为此您需要创建三个类:
public class Search
{
//Your Code
}
public class AdvanceSearch : Search
{
//Your Code
}
public class SimpleSearch : Search
{
//Your Code
}
Run Code Online (Sandbox Code Playgroud)
然后基于类创建数据模板:
<DataTemplate DataType="{x:Type local:AdvanceSearch }">
<StackPanel>
<TextBlock Text="{Binding Path=Name}" />
<TextBlock Text="{Binding Path=Email}"/>
</StackPanel>
</DataTemplate>
<DataTemplate DataType="{x:Type local:SimpleSearch }">
<StackPanel>
<TextBlock Text="{Binding Path=Name}" />
</StackPanel>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)
我会根据需要使用 DataTrigger 来交换ContentTemplatea ContentControl。如果您有兴趣,我在这里写了一篇关于在 MVVM 中切换视图的文章(包含示例)
这是一些演示它的快速测试代码:
<Window.Resources>
<DataTemplate x:Key="TemplateA" >
<TextBlock Text="I'm Template A" />
</DataTemplate>
<DataTemplate x:Key="TemplateB" >
<TextBlock Text="I'm Template B" />
</DataTemplate>
</Window.Resources>
<StackPanel>
<ToggleButton x:Name="Test" Content="Test" />
<ContentControl>
<ContentControl.Style>
<Style TargetType="{x:Type ContentControl}">
<Setter Property="ContentTemplate" Value="{StaticResource TemplateA}" />
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=Test, Path=IsChecked}" Value="True">
<Setter Property="ContentTemplate" Value="{StaticResource TemplateB}" />
</DataTrigger>
</Style.Triggers>
</Style>
</ContentControl.Style>
</ContentControl>
</StackPanel>
Run Code Online (Sandbox Code Playgroud)