C#WPF来回绑定

C#WPF来回绑定,c#,wpf,binding,C#,Wpf,Binding,我对Wpf中的绑定还不熟悉,我可能忽略了一些东西,或者走错了方向 我有一个名为Navigator(Controller)的类,它连接视图(UI)和服务(DataProvider)。视图和服务交换的唯一内容是导航器持有的数据模型(CurrentData) public class Navigator : INotifyPropertyChanged 使用静态I()和Instance()获取实例的Singleton类 Binding myBinding = new Bindin

我对Wpf中的绑定还不熟悉,我可能忽略了一些东西,或者走错了方向

我有一个名为Navigator(Controller)的类,它连接视图(UI)和服务(DataProvider)。视图和服务交换的唯一内容是导航器持有的数据模型(CurrentData)

public class Navigator : INotifyPropertyChanged 
使用静态I()和Instance()获取实例的Singleton类

        Binding myBinding = new Binding();
        myBinding.Source = Navigator.I;
        myBinding.Path = new PropertyPath("CurrentView");
        myBinding.Mode = BindingMode.OneWay;
        myBinding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
        BindingOperations.SetBinding(MasterWindow.ViewFrame, Frame.ContentProperty, myBinding);

        Binding myBinding2 = new Binding();
        myBinding2.Source = Navigator.I;
        myBinding2.Path = new PropertyPath("DataModel");
        myBinding2.Mode = BindingMode.TwoWay;
        myBinding2.BindsDirectlyToSource = true;
        myBinding2.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
        BindingOperations.SetBinding(CurrentView, Page.DataContextProperty, myBinding2);

        Binding myBinding11 = new Binding();
        myBinding11.Source = Navigator.I;
        myBinding11.Path = new PropertyPath("DataModel");
        myBinding11.Mode = BindingMode.TwoWay;
        myBinding11.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
        BindingOperations.SetBinding(ActiveService, UIService.ServiceModelProperty, myBinding11);

        Binding myBinding10 = new Binding();
        myBinding10.Source = Navigator.I.CurrentView;
        myBinding10.Path = new PropertyPath("Title");
        myBinding10.Mode = BindingMode.OneWay;
        myBinding10.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
        myBinding10.BindsDirectlyToSource = true;
        BindingOperations.SetBinding(MasterWindow, Window.TitleProperty, myBinding10);
Navigator类中的代码隐藏绑定

视图(页面)中的标题绑定到主机主窗口标题

当更改CurrentView时,标题会被卡住 到第一个视图集

一个视图根据其使用的数据类型显示标题

<Page.Resources>
    <conv:DataTypeToString x:Key="ToString"/>
</Page.Resources>
<Page.Title>
    <Binding Path="DataType" Mode="OneWay" ConverterParameter="plural" Converter="{StaticResource ToString}"/>

</Page.Title>

当更改CurrentView时,标题会被卡住 到第一个视图集


我的绑定有问题,但找不到原因是什么?

当您将绑定的源设置为这样时:

myBinding10.Source = Navigator.I.CurrentView;
那么,绑定的源在任何时候都不是
CurrentView
属性下保存的任何内容的“最新”,而是在执行此行时将源设置为该属性的值。因此,即使以后属性值可能会更改,源代码仍将保持不变,标题也不会更改。为了使绑定框架也“跟踪”对
CurrentView
属性的更改(除了
Title
属性),您应该将其作为路径的一部分,而不是源。因此,这应该可以解决您的问题:

myBinding10.Source = Navigator.I;
myBinding10.Path = new PropertyPath("CurrentView.Title");
现在,每当
CurrentView
更改或其当前值的
Title
更改时,它都会反映在您的UI中