【问题标题】:How can I easily expose bindable properties of nested controls from a custom UserControl?如何轻松地从自定义 UserControl 公开嵌套控件的可绑定属性?
【发布时间】:2011-10-20 09:18:49
【问题描述】:

我在堆栈上的第一个问题。请原谅我提前做出不好的解释。

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

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

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

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

【问题讨论】:

  • 欢迎来到 SO。我会说这是一个很好的第一个问题。

标签: silverlight binding listbox custom-controls


【解决方案1】:

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

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

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

然后在视图中:

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

然后您的ChildViewModel 将包含SelectedItem 之类的属性以将您的ListBox 绑定到。

【讨论】:

  • 谢谢!我没有意识到自定义控件会继承父级的 DataContext 集。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-01
  • 2010-12-04
  • 1970-01-01
  • 2015-06-03
  • 1970-01-01
  • 2016-02-10
  • 1970-01-01
相关资源
最近更新 更多