使用MVVM,我有一个包含DependencyProperty的View和一个绑定(bind)到ViewModel的ListBox:
public static readonly DependencyProperty SelectedServerProperty =
DependencyProperty.Register("SelectedServer",typeof(object),
typeof(ServerView), new FrameworkPropertyMetadata(test));
public object SelectedServer
{
get { return GetValue(SelectedServerProperty); }
set { SetValue(SelectedServerProperty, value); }
}
public ServerView()
{
SetBinding(SelectedServerProperty, "SelectedServer");
InitializeComponent();
}
public static void test(DependancyObject sender, DependancyPropertyChangedEventArgs e)
{
...
}
XAML:
<ListBox ItemsSource="{Binding Servers}" DisplayMemberPath="Name" SelectedItem="{Binding SelectedServer}" />
和一个实现INotifyPropertyChanged的ViewModel:
ServerModel _selectedServer;
public ServerModel SelectedServer
{
get { return _selectedServer; }
set
{
_selectedServer = value;
RaisePropertyChanged("SelectedServer");
}
}
当我在列表中选择一个项目时,将更新ViewModel,但 View 中的DependencyProperty保持不变。即使我创建的测试事件也不会触发。
我究竟做错了什么?
最佳答案
我认为SetBinding
试图绑定(bind)到View中定义的Property
,而不是VM。因此,请尝试使用语法
SetBinding(SelectedServerProperty, new Binding("SelectedServer"));
这将尝试绑定(bind)到VM中的
SelectedServer
属性( View 的DataContext
)。 Here是MSDN的链接,它将对您有帮助。