我有一个主视图和许多用户控件。
主视图包含一个两列网格,第一列填充了一个列表框,其datatemplate包含一个usercontrol,另一列填充了另一个usercontrol。这两个用户控件具有相同的datacontext。
的MainView:
<Grid>
//Column defs
...
<ListView Grid.Column="0" ItemSource="{Binding FooList}">
...
<DataTemplate>
<Views: FooView1 />
</DataTemplate>
</ListView>
<TextBlock Text="{Binding FooList.Count}" />
<StackPanel Grid.Column="1">
<Views: FooView2 />
</StackPanel>
<Grid>
FooView1:
<UserControl>
<TextBlock Text="{Binding Foo.Title}">
</UserControl>
FooView2:
<UserControl>
<TextBlock Text="{Binding Foo.Detail1}">
<TextBlock Text="{Binding Foo.Detail2}">
<TextBlock Text="{Binding Foo.Detail3}">
<TextBlock Text="{Binding Foo.Detail4}">
</UserControl>
我这里没有IDE。如果有任何语法错误
,请原谅当用户点击按钮时。这两个用户控件必须由另外两个用户控件替换,因此datacontext更改,主ui保持不变。
即BarView1的FooView1和BarView2的FooView2
简而言之,我想将主视图中的视图更改绑定到我的命令(来自Button的命令)
我该怎么做?
还告诉我是否可以合并usercontrol对,以便每个viewmodel只存在一个视图
即FooView1和FooView2进入FooView等等......
答案 0 :(得分:1)
虽然我仍然不确定我是否有你,但我建议如下。
在您的示例中,您似乎想要显示 Foo 对象的详细信息。 datacontext保持不变。也许您可以在viewmodel中设置Visibility-Flags来决定要显示的内容。这可以使用按钮执行的命令来完成。
<强> FooView:强>
<UserControl>
<TextBlock Text="{Binding Foo.Title}"
Visibility="{Binding ShowTitle}">
<TextBlock Text="{Binding Foo.Detail1}"
Visibility="{Binding ShowDetails}">
<TextBlock Text="{Binding Foo.Detail2}"
Visibility="{Binding ShowDetails}">
<TextBlock Text="{Binding Foo.Detail3}"
Visibility="{Binding ShowDetails}">
<TextBlock Text="{Binding Foo.Detail4}"
Visibility="{Binding ShowDetails}">
</UserControl>
这是一个可能的解决方案吗?
如果您想更改数据模板,可以执行以下操作:
FooView(第二版)
<UserControl>
<UserControl.Resources>
<DataTemplate x:Key="dataTemplate1">
<TextBlock Text="{Binding Foo.Title}">
</DataTemplate>
<DataTemplate x:Key="dataTemplate2">
<TextBlock Text="{Binding Foo.Detail1}">
<TextBlock Text="{Binding Foo.Detail2}">
<TextBlock Text="{Binding Foo.Detail3}">
<TextBlock Text="{Binding Foo.Detail4}">
</DataTemplate>
</UserControl.Resources>
<Style x:Key="Default">
<Style.Triggers>
<DataTrigger Binding="{Binding Foo.ShowFooView}" Value="1" >
<Setter Property="Template" Value="{StaticResource dataTemplate1}" />
<DataTrigger>
<DataTrigger Binding="{Binding Data.ShowFooView}" Value="2" >
<Setter Property="Template" Foo="{StaticResource dataTemplate2}" />
</DataTrigger>
</Style.Triggers>
</Style>
</UserControl>
这个想法是,根据属性 Foo.ShowFooView ,你决定应该使用哪个数据模板。当然 Foo 类型应该实现 INotifyPropertyChanged 来通知UI。
答案 1 :(得分:0)
抱歉,但我不明白这一点。要回答您的问题,您需要提供更多信息。