【问题标题】:C# WPF binding back and forthC# WPF 来回绑定
【发布时间】:2015-12-07 22:35:41
【问题描述】:

我是 Wpf 中绑定的新手,我可能忽略了某些东西或以错误的方式处理它。

Map of my bindings

我有一个名为 Navigator(Controller) 的类,它连接 View(UI) 和 Service(DataProvider)。视图和服务交换的唯一内容是 Navigator 持有的 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 类中的绑定代码

View(Page) 中的标题绑定到主机 MainWindow Title。

中断的地方是当 CurrentView 改变时,Title 卡住了 到第一个视图集。

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

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

</Page.Title>

中断的地方是当 CurrentView 改变时,Title 卡住了 到第一个视图集。

我在 Binding 上做错了,但不知道是什么?

【问题讨论】:

    标签: c# wpf binding


    【解决方案1】:

    当你像这样设置绑定源时:

    myBinding10.Source = Navigator.I.CurrentView;
    

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

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

    现在,每当 CurrentView 更改或当前值的 Title 更改时,它都会反映在您的 UI 中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多