使用MVVM,我有一个包含DependencyProperty的View和一个绑定到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保持不变。甚至我创建的测试事件也没有被触发。 我做错了什么?
答案 0 :(得分:0)
我认为SetBinding
正在尝试绑定到View中定义的Property
而不是VM。所以尝试使用语法
SetBinding(SelectedServerProperty, new Binding("SelectedServer"));
这会尝试绑定到VM中的SelectedServer
属性(View的DataContext
)。Here是来自MSDN的链接,可以帮助您。