다음은 내 모델 ViewModel
및 xaml 바인딩의 예입니다. viewmodel은 INotifyPropertChanged
을 구현합니다. 내가 겪고있는 문제는 ... wpf 폼을 처음로드 할 때 ActiveStock
을 설정하면 setter와 getter가 모두 호출되고 UI가 데이터를 올바르게 반영하도록 업데이트됩니다.
그러나 나중에 StockViewModel.ActiveStoc
k를 설정하면 FirePropertyChanged
이 호출되지만 getter가 호출되는 것을 볼 수 없으므로 UI가 새 데이터를 반영하도록 업데이트되지 않습니다. 여기에 무슨 일이 일어날 지 모릅니다.양식이로드 된 후 INotifyPropertyChanged.PropertyChanged가 실행되었지만 UI가 업데이트되지 않습니다.
두 번째 질문은 ViewModel.ActiveStock
이 변경되면 내 모델의 하위 속성 (PriceData
및 CompanyData
)에 대해 PropertyChanged
을 올릴 필요가 있는지 여부입니다.
public class Stock
{
public string Ticker { get; set; }
public StockData PriceData { get; set; }
public StockData CompanyData { get; set; }
}
public class StockData
{
...
}
public class StockViewModel:INotifyPropertyChanged
{
private Stock _activeStock;
public Stock ActiveStock
{
get{ return _activeStock;}
set{ _activeStock = value; FirePropertyChanged("ActiveStock");}
}
...
}
XAML :
<UserControl Template="{StaticResource StockTemplate}" DataContext="{Binding ActiveStock}" Tag="{Binding PriceData}" />
<UserControl Template="{StaticResource StockTemplate}" DataContext="{Binding ActiveStock}" Tag="{Binding CompanyData}" />
편집 : 내가 UserControl을위한 바인딩의 DataContext를 제거하고 대신 ActiveStock 변경, 그것은 잘 작동 할 때 뒤에 코드에서이 두 컨트롤에 대한 DataContext를 설정합니다. 왜???
게터는 지금까지의 내가 아무것도 볼 수있는 값을 "점점"이기 때문이라고하지 않을
뷰의 코드 숨김을 표시하여 ViewModel을 바인딩하는 방법과 ActiveStock에서 데이터를 설정하는 방법을 확인할 수 있습니다. – Xcalibur37
1) StockTemplate에 대한 xaml을 보는 것이 도움이됩니다. 2) InitializeComponent() 전후에 View의 DataContext를 설정합니까? –
후 ... FirePropertyChanged 인수에 문제가있는 것으로 판명되었습니다! 이런 ... 나는 InotifyPropertyChanged를 다루는 더 좋은 방법 (반사없이)이 있었으면 좋겠다. – mike01010