2014-11-18 2 views
0

Я видел достаточно примеров со связыванием с свойством A с текстом datacontext, где в классе viewModel существует A. Теперь что, если в viewModel у меня нет никакого свойства A, вместо этого я создаю некоторые calss B, который содержит свойство A, то как настроить привязку здесь?Как косвенно установить привязку?

Скажем, в XAML <TextBlock Text="{Binding Bid}"..> и в конструкторе ViewModel, я настроить

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

Так b продолжает обновлять свой Bid и Ask ... Дело в том, что я не вижу, как установить привязку к bBid. Для listview или DataGrid Я могу видеть, как это сделать, поскольку есть свойство, называемое itemsource, чтобы указать источник привязки данных, и для каждого столбца различное свойство связывается с любым свойством, если это необходимо.

+0

В любом случае экземпляр 'b' должен быть *** доступен *** внутри кода XAML, если вы хотите установить привязку внутри кода XAML. –

+0

это правильно ~ Ty! – baozi

ответ

1

Сам класс должен быть собственностью.

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

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

В вашей модели viewmodel создайте свойство A, у которого есть уведомление о его изменении, но получите данные из экземпляра B. Если B имеет INotifyPropertyChanged, затем подписаться на эти изменения и когда B события срабатывает, что изменение произошло, опубликовать уведомление изменения для вашего имущества A, таких как

OnPropertyChanged("A"); 

Таким образом, вы можете иметь связанную информацию, которая существует в других странах, но до сих пор соответственно обновляет представление.


Это будет обновляться при изменении данных B собственности, в собственность A на MVVM.

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"); 
     }; 

    } 
} 
+0

Не могли бы вы привести какие-нибудь макияжные простые примеры? Я не понимаю, что первый экземпляр 'B' уже имеет свойство' A' и 'A' имеет INotifyChanged, во-вторых, если я получу то, что вы говорите, мне нужно создать свойство' C' в viewModel и подписаться на 'A''s propertychanged в примере 'B', что кажется невозможным, поскольку viewModel и' B' не знают друг друга. – baozi

Смежные вопросы