C#WPF来回绑定
我对Wpf中的绑定还不熟悉,我可能忽略了一些东西,或者走错了方向 我有一个名为Navigator(Controller)的类,它连接视图(UI)和服务(DataProvider)。视图和服务交换的唯一内容是导航器持有的数据模型(CurrentData)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
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中