如何取消设置应用于对象的绑定,以便可以从不同位置对其应用另一个绑定?
假设我有两个数据模板绑定到同一个对象引用。
数据模板 #1 是要加载的默认模板。我尝试将按钮命令绑定到Function1
我的 DataContext 类中:
<Button Content="Button 1" CommandParameter="{Binding }" Command="{Binding DataContext.Function1, RelativeSource={RelativeSource AncestorType={x:Type Window}}}"/>
这实际上有效并且函数被绑定。但是,当我尝试将 Data Template #2 加载到同一个对象时(同时尝试将另一个按钮命令绑定Function2
到来自我的 DataContext 类的不同函数()):
<Button Content="Button 2" CommandParameter="{Binding }" Command="{Binding DataContext.Function2, RelativeSource={RelativeSource AncestorType={x:Type Window}}}" />
它不起作用,第一个绑定仍然是执行的。有解决方法吗?
编辑(为了更好的问题上下文):
我在 Window.Resources 中定义了我的模板:
<Window.Resources>
<DataTemplate DataType="{x:Type local:ViewModel1}">
<local:View1 />
</DataTemplate>
<DataTemplate DataType="{x:Type local:ViewModel2}">
<local:View2 />
</DataTemplate>
</Window.Resources>
View1.xaml 和 View2.xaml 包含我上面描述的按钮定义(我希望它们控制我的流程流)。ViewModel1 和 ViewModel2 是我的 ViewModel,它们实现了IPageViewModel
我的变量类型的接口CurrentPageViewModel
。
在我的 XAML 中,我绑定ContentControl
到变量CurrentPageViewModel
:
<ContentControl Content="{Binding CurrentPageViewModel}" HorizontalAlignment="Center"/>
在我的 .CS 中,我有一个定义为 的列表List<IPageViewModel> PageViewModels
,我用它来包含我的两个视图模型的实例:
PageViewModels.Add(new ViewModel1());
PageViewModels.Add(new ViewModel2());
// Set starting page
CurrentPageViewModel = PageViewModels[0];
当我尝试将我CurrentPageViewModel
的视图模型更改为另一个视图模型时,这就是我希望新绑定起作用的时候。不幸的是,事实并非如此。我做事的方式正确吗?