使用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的链接,它将对您有帮助。

10-07 20:01
查看更多