如何间接设置绑定?

时间:2014-11-18 19:06:44

标签: wpf binding

我已经看到了足够的示例绑定到属性A的一个datacontext,其中A存在于viewModel类中。现在如果在viewModel中我没有任何属性A,而是创建一些包含属性A的calss B,那么如何在这里设置绑定呢?

让我们在xaml <TextBlock Text="{Binding Bid}"..>中说出来并在我设置的viewModel构造函数中

Quote b = new Quote();
HttpClient.QuoteMap.Add(1,b);
HttpClient.Socket.reqMktdata(1,contract,..)

所以b不断更新其BidAsk ...事情是我不知道如何设置绑定到b&#39 ; s Bid。对于listviewDataGrid,我可以看到如何执行此操作,因为有一个名为itemsource的属性来指定数据绑定源,对于每个列,不同的属性绑定到任何属性,如果需要的。

2 个答案:

答案 0 :(得分:1)

班级本身需要是一个财产。

<TextBlock Text="{Binding Path=MyClassToBind.PublicProperty}"

private MyClass myClass = new MyClass();
public MyClass MyClassToBind 
{    get { return  myClass; }  }

答案 1 :(得分:0)

在您的viewmodel中创建一个属性A,该属性在其更改时包含notify事件,但从B实例获取数据。如果B具有INotifyPropertyChanged,则订阅这些更改,当B事件触发发生更改时,请发布您的属性A的通知更改,例如

OnPropertyChanged("A"); 

通过这种方式,您可以获得其他地方存在的相关数据,但仍会相应地更新视图。


这将在B属性Data更改时更新到MVVM上的属性A

class MyMVVM : INotifyPropertyChanged
{
        private TheBClass B { get;  set { OnPropertyChanged("A"); } }

        public string A
        {
            get { return B.Data; }
            set { OnPropertyChanged("A"); }
        }


   public MVVM(TheBClass bInstance;)
   {
      B = bInstance;

      B.PropertyChanged += (sender, args) =>
      {
          if (args.PropertyName == "Data")
             OnPropertyChanged("A");
      };

   }
}