如何从自定义UserControl轻松公开嵌套控件的可绑定属性?

时间:2011-08-04 21:15:45

标签: silverlight binding listbox custom-controls

我在堆栈上的第一个问题。请原谅我的错误解释。

我正在开发我的第一个MVVM应用程序(Silverlight)。我有一个自定义用户控件,其中包含一个ListBox来显示导航项。此控件放在我的主xaml页面中。我不知道是否需要使用视图模型创建复合视图模型(我的主页面视图模型),尤其是对于其中的自定义控件,或者是否有某种方法来提升我需要绑定的ListBox属性。

通过XAML我不知道如何将自定义控件中ListBox的ItemsSource属性绑定到我的主页面viewmodel。基本上,我正在质疑我的设计决定,试图通过我的主页面视图模型绑定自定义控件。

到目前为止,我所做的是为自定义控件创建依赖项属性,并尝试将这些依赖项属性向下传递给ListBox属性。我使用ItemsSource的这个方法取得了成功,但是我遇到了SelectedItem的问题。

即使我确实让SelectedItem工作,它仍然感觉错误。感谢您提前获得任何建议。

1 个答案:

答案 0 :(得分:1)

UserControl应从其父控件继承DataContext,除非您直接设置它。然后,您可以从UserControl绑定到视图模型上的属性。

如果您想专门为ViewModel创建UserControl,您也可以这样做。然后,您将其作为主ViewModel上的属性公开,并在MainPage中绑定到它。例如:

public class MainViewModel
{
    public ChildViewModel ChildInfo { get; private set; }
}

然后在视图中:

<Grid>
    ...
    <lcl:ChildView DataContext="{Binding ChildInfo}" />
    ...
</Grid>

您的ChildViewModel将包含SelectedItem等属性,以便将ListBox绑定到。