我已经看到了足够的示例绑定到属性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
不断更新其Bid
和Ask
...事情是我不知道如何设置绑定到b
&#39 ; s Bid
。对于listview
或DataGrid
,我可以看到如何执行此操作,因为有一个名为itemsource
的属性来指定数据绑定源,对于每个列,不同的属性绑定到任何属性,如果需要的。
答案 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");
};
}
}