我正在处理媒体应用程序,我有一个设置窗口,其中有一个带有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绑定设置为该类的实例。
这是最好的方式还是我可以遵循更好的做法?
感谢所有的帮助!
答案 0 :(得分:0)
如果ItemsSource引用等效数据而不管显示的视图类型,则创建其他ViewModel。将数据放入其中并将StackPanel的DataContext设置为该ViewModel对象。无论你在哪里放置StackPanel,它都是独立的,因为它已经设置了DataContext。