我在堆栈上的第一个问题。请原谅我的错误解释。
我正在开发我的第一个MVVM应用程序(Silverlight)。我有一个自定义用户控件,其中包含一个ListBox来显示导航项。此控件放在我的主xaml页面中。我不知道是否需要使用视图模型创建复合视图模型(我的主页面视图模型),尤其是对于其中的自定义控件,或者是否有某种方法来提升我需要绑定的ListBox属性。
通过XAML我不知道如何将自定义控件中ListBox的ItemsSource属性绑定到我的主页面viewmodel。基本上,我正在质疑我的设计决定,试图通过我的主页面视图模型绑定自定义控件。
到目前为止,我所做的是为自定义控件创建依赖项属性,并尝试将这些依赖项属性向下传递给ListBox属性。我使用ItemsSource的这个方法取得了成功,但是我遇到了SelectedItem的问题。
即使我确实让SelectedItem工作,它仍然感觉错误。感谢您提前获得任何建议。
答案 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
绑定到。