将多个绑定传递到ContentControl和Datatemplate

时间:2015-12-11 22:55:19

标签: wpf vb.net binding datatemplate contentcontrol

我正在处理媒体应用程序,我有一个设置窗口,其中有一个带有3个组合框的堆栈面板。这些的ItemSource都绑定到同一个List(Of SoundDevice)以向用户显示所有可用的声音计算机上的设备。

这些组合框中的每一个SelectedValue都绑定到我的SettingsClass对象的子类(称为SoundDevicesClass)上的不同公共属性,允许用户为不同的任务选择不同的设备。

我现在想要在绑定到SoundDevicesClass的另一个实例的应用程序的另一个区域中重用这个相同的stackpanel。

我的计划是将stackpanel移动到DataTemplate中,然后将其放在我的设置窗口的ContentControl中。然后可以通过

轻松将其绑定到后端对象
Content="{Binding Settings.SoundDevices}".

我遇到的问题是我应该将comboBoxes ItemsSource绑定到什么?在设置窗口中,它绑定到名为AllowedSoundDevices的设置窗口的属性,使用{binding ElementName = SettingsWindow,Path = AllowedSoundDevices},它可以正常工作,但如果我将datatemplate移动到共享资源字典,显然将无法工作。

我的第一个想法是定义一个名为SoundDevicesSettingsClass的新类,例如:

Public Class SoundDevicesSettingsClass
  Public Property AllowedSoundDevices as AllowedSoundDevicesClass
  Public Property SoundDevices as SoundDevicesClass
End Class

然后将Content绑定设置为该类的实例。

这是最好的方式还是我可以遵循更好的做法?

感谢所有的帮助!

1 个答案:

答案 0 :(得分:0)

如果ItemsSource引用等效数据而不管显示的视图类型,则创建其他ViewModel。将数据放入其中并将StackPanel的DataContext设置为该ViewModel对象。无论你在哪里放置StackPanel,它都是独立的,因为它已经设置了DataContext。