C#WPF来回绑定

时间:2015-12-07 22:35:41

标签: c# wpf binding

我是Wpf绑定的新手,我可能会忽视某些事情或以错误的方式解决问题。

Map of my bindings

我有一个名为Navigator(Controller)的类,它连接View(UI)和Service(DataProvider)。视图和服务交换唯一的东西是导航器所拥有的DataModel(CurrentData)。

public class Navigator : INotifyPropertyChanged 

Singleton类使用Static I()和Instance()来获取实例

        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类中绑定背后的代码

视图(页面)中的标题绑定到主机MainWindow Title。

  

中断的地方是当更改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时,标题会被卡住 到第一个视图集。

我对Binding做错了但是找不到什么?

1 个答案:

答案 0 :(得分:0)

如下所示设置绑定源:

myBinding10.Source = Navigator.I.CurrentView;

然后绑定的源代码与任何时候在CurrentView属性下保存的内容都不是“最新的”,而是在此行的时刻将源设置为该属性的值被执行。因此,即使属性值可能稍后更改,源也将保持不变,并且标题不会更改。为了使绑定框架也“跟踪”CurrentView属性的更改(除了Title属性),您应该将其作为路径的一部分而不是源。所以这应该可以解决你的问题:

myBinding10.Source = Navigator.I;
myBinding10.Path = new PropertyPath("CurrentView.Title");

现在每当CurrentView更改或当前值的Title发生更改时,它都会反映在您的用户界面中。