我在WP7應用程序中使用標準的透視模板。如何將usercontrol綁定到應用程序viewmodel
我有一些額外的屬性中定義的MainViewModel類:
public class MainViewModel : INotifyPropertyChanged
{
...
private MyClass selectedKey_m;
public MyClass SelectedKey
{
get
{
...
}
set
{
if (value != this.selectedKey_m)
{
this.selectedKey_m = value;
NotifyPropertyChanged("SelectedKey");
}
}
}
}
App類有一個視圖模型實例:
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:
DataContext = App.ViewModel;
從這裏,我可以設置ListBox的雙向綁定,我知道它的工作原理becaus 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屬性的setter得到在視圖模型的SelectedKey屬性被改變時調用,但不是。
我也嘗試設置在XAML我的用戶控件的DataContext:
DataContext="{Binding Path=App.ViewModel}"
試過這個,沒有運氣。我也使用ILSpy來查看TextBlock代碼,它也沒有這個,但它似乎工作。我錯過了什麼...... – Jeremy 2011-06-17 01:23:01