C# ContentControl绑定和DataTemplates即使有效也会产生绑定错误

C# ContentControl绑定和DataTemplates即使有效也会产生绑定错误,c#,wpf,mvvm,datatemplate,contentcontrol,C#,Wpf,Mvvm,Datatemplate,Contentcontrol,我试图在代码中使用ContentControl和DataTemplate切换viewmodels。代码正常工作,似乎绑定正确,但输出中出现错误: System.Windows.Data Error: 40 : BindingExpression path error: 'Value1' property not found on 'object' ''ViewModel2' (HashCode=1202201)'. BindingExpression:Path=Value1; DataItem=

我试图在代码中使用ContentControl和DataTemplate切换viewmodels。代码正常工作,似乎绑定正确,但输出中出现错误:

System.Windows.Data Error: 40 : BindingExpression path error: 'Value1' property not found on 'object' ''ViewModel2' (HashCode=1202201)'. BindingExpression:Path=Value1; DataItem='ViewModel2' (HashCode=1202201); target element is 'TextBlock' (Name=''); target property is 'Text' (type 'String')
System.Windows.Data Error: 40 : BindingExpression path error: 'Value2' property not found on 'object' ''ViewModel1' (HashCode=7634749)'. BindingExpression:Path=Value2; DataItem='ViewModel1' (HashCode=7634749); target element is 'TextBlock' (Name=''); target property is 'Text' (type 'String')
主视图(容器)的代码:

ViewModel1和ViewModel2的代码相同,只是它们引用了自己的viewmodel及其属性(ViewModel1的值1和ViewModel2的值2):

视图模型1:

public class ViewModel1 : ViewModelBase
{
    public double m_value = new Random((int)DateTime.Now.ToBinary()).NextDouble();

    public string Value1
    {
        get { return m_value.ToString(); }
    }
}
视图1:

<TextBlock Text="{Binding Value1}"/>

我猜问题在于,当计时器更改属性CurrentViewModel中的ViewModel时,未显示的视图仍在内存中,并尝试绑定到错误的ViewModel(因此View2尝试从ViewModel1获取Value2)

有没有办法解决这个问题?因此,只有当CurrentViewModel的类型是正确的类型时,才会发生绑定。(我可以使用转换器并将预期类型作为参数传递,但有更好的解决方案吗?)


谢谢

尝试删除
DataContext=“{Binding ElementName=UserControlContainer,Path=Content}”
-您不需要这样做。数据模板中的
DataContext
已经是
ContentControl
的内容。您好!您是对的,它在没有DataContext的情况下工作。谢谢@EliArbel您可能希望将其放在单独的答案中,而不是注释中,以便OP可以将其标记为已回答。
public class ViewModel1 : ViewModelBase
{
    public double m_value = new Random((int)DateTime.Now.ToBinary()).NextDouble();

    public string Value1
    {
        get { return m_value.ToString(); }
    }
}
<TextBlock Text="{Binding Value1}"/>