WP7 응용 프로그램에서 표준 피벗 템플릿을 사용하고 있습니다.usercontrol을 응용 프로그램에 바인딩하는 방법 viewmodel
public class MainViewModel : INotifyPropertyChanged
{
...
private MyClass selectedKey_m;
public MyClass SelectedKey
{
get
{
...
}
set
{
if (value != this.selectedKey_m)
{
this.selectedKey_m = value;
NotifyPropertyChanged("SelectedKey");
}
}
}
}
앱 클래스는 뷰 모델 인스턴스가 있습니다 :
private static MainViewModel viewModel = null;
public static MainViewModel ViewModel
{
get
{
// Delay creation of the view model until necessary
if (viewModel == null)
viewModel = new MainViewModel();
return viewModel;
}
}
내 MainPage.xaml.cs를
이 설정을 DataContext를 :나는 몇 가지 추가 속성 정의 MainViewModel 클래스가
DataContext = App.ViewModel;
여기에서 ListBox에 대해 양방향 바인딩을 설정할 수 있습니다. e 내 viewmodel의 SelecetdKey 속성에 중단 점을 넣으면 setter가 호출 된 것을 볼 수 있습니다.
내 문제는 뷰 모델의 SelectedKey 속성에 바인딩 된 바인딩 가능한 속성이있는 내 자신의 사용자 정의 컨트롤이 있지만 viewmodel이 업데이트되면 가져올 수없는 사용자 컨트롤의 속성이 설정되지 않는다는 것입니다. 이유를 찾아라. 여기
내 사용자 컨트롤입니다 :public partial class MyUserControl : UserControl
{
public static readonly DependencyProperty SelectedKeyProperty = DependencyProperty.Register(
"SelectedKey", typeof(MyClass), typeof(MyUserControl), new PropertyMetadata(null));
public MyClass SelectedKey
{
get { return (MyClass)this.GetValue(SelectedKeyProperty); }
set { this.SetValue(SelectedKeyProperty, value); }
}
}
그리고 여기 내 메인 페이지의 XAML입니다 :
<local:MyUserControl x:Name="myUC" SelectedKey="{Binding Path=SelectedKey}">
내가 내 사용자 컨트롤의 SelectedKey 속성에 대한 세터 얻을 것으로 기대 뷰 모델의 SelectedKey 속성이 변경되었지만 호출되지 않을 때 호출됩니다.
나는 또한 XAML에서 내 사용자 컨트롤의 데이터 컨텍스트를 설정 시도했다 :DataContext="{Binding Path=App.ViewModel}"
시도해 보니, 행운이 없습니다. 또한 ILSpy를 사용하여 TextBlock 코드를 살펴 보았으며이 중 하나가 없어도 작동하는 것으로 보입니다. 내가 도대체 뭐라구 ... – Jeremy