来自不同来源的WPF绑定
我正在为我的应用程序设计非常简单但有效的UI。问题是,经过一些动作,比如说重构,我开始重新规划我的设计 以前我有过来自不同来源的WPF绑定,wpf,binding,tabcontrol,multibinding,Wpf,Binding,Tabcontrol,Multibinding,我正在为我的应用程序设计非常简单但有效的UI。问题是,经过一些动作,比如说重构,我开始重新规划我的设计 以前我有过observableCollection。我的选项卡控件(具有复杂的自定义样式…)绑定到该集合。但现在,我还需要像“图书馆”标签项目中有连接的USB设备。库不是一个集合,而是一个业务对象,其中包含一些重要的XML数据。我想使用我的标签控件,否则就必须发明一些切换逻辑:我不能让USB设备和库同时被选中 所以,我的问题是: 1) 也许你们中的一些人,WPF大师,知道从不同来源绑定的复杂方
observableCollection
。我的选项卡控件(具有复杂的自定义样式…)绑定到该集合。但现在,我还需要像“图书馆”标签项目中有连接的USB设备。库不是一个集合,而是一个业务对象,其中包含一些重要的XML数据。我想使用我的标签控件,否则就必须发明一些切换逻辑:我不能让USB设备和库同时被选中
所以,我的问题是:
1) 也许你们中的一些人,WPF大师,知道从不同来源绑定的复杂方法?最明显的决定是在其他地方做一些类似于observeableAction
的事情,但这对我来说非常难看。
2) 或者,如果这是不可能的,也许你们中的一些人对上述问题有更简单的解决方案 如果我理解正确,您可以使用。在
选项卡控件中
:
<TabControl ...>
<TabControl.ItemsSource>
<CompositeCollection>
<CollectionContainer Collection="{Binding UsbDevicesCollection}"/>
<TabItem DataContext="{Binding LibraryViewModel}"/>
</CompositeCollection>
</TabControl.ItemsSource>
</TabControl>
当然,您必须为您的收藏和库对象设置专有名称。如果我理解正确,您可以使用。在
选项卡控件中
:
<TabControl ...>
<TabControl.ItemsSource>
<CompositeCollection>
<CollectionContainer Collection="{Binding UsbDevicesCollection}"/>
<TabItem DataContext="{Binding LibraryViewModel}"/>
</CompositeCollection>
</TabControl.ItemsSource>
</TabControl>
当然,您必须为集合和库对象设置专有名称
ObservableCollection
ObservableCollection
这将使您的设计更具可读性和可维护性。尝试扩展一个通用集合,如下所示:
public class CustomCollection<T> : List<T>
{
public object Library { get; set; }
.......//properties you need
.......//properties you need
public T CurrentTab { get; set; }
}
公共类CustomCollection:列表
{
公共对象库{get;set;}
……你需要的财产
……你需要的财产
公共T CurrentTab{get;set;}
}
在此自定义集合中,您可以保存集合,也可以保存库对象。比如:
var UsbDevicesCollection = new CustomCollection<UsbDevice>();
UsbDevicesCollection.Add(new UsbDevice()); // add items as usual
UsbDevicesCollection.Library = new Object();//whatever kind of object is this
var usbdevicecollection=new CustomCollection();
usbdevicecollection.Add(新的UsbDevice());//像往常一样添加项目
usbdevicecollection.Library=新对象()//这是什么东西
当你说“我不能同时选择USB设备和库”时,你也可以在这个类中编写一些逻辑来实现这一点。
而绑定将类似于:
<TabItem DataContext="{Binding UsbDevicesCollection.Library}"/>
希望这就是您想要的。尝试扩展通用集合,如下所示:
public class CustomCollection<T> : List<T>
{
public object Library { get; set; }
.......//properties you need
.......//properties you need
public T CurrentTab { get; set; }
}
公共类CustomCollection:列表
{
公共对象库{get;set;}
……你需要的财产
……你需要的财产
公共T CurrentTab{get;set;}
}
在此自定义集合中,您可以保存集合,也可以保存库对象。比如:
var UsbDevicesCollection = new CustomCollection<UsbDevice>();
UsbDevicesCollection.Add(new UsbDevice()); // add items as usual
UsbDevicesCollection.Library = new Object();//whatever kind of object is this
var usbdevicecollection=new CustomCollection();
usbdevicecollection.Add(新的UsbDevice());//像往常一样添加项目
usbdevicecollection.Library=新对象()//这是什么东西
当你说“我不能同时选择USB设备和库”时,你也可以在这个类中编写一些逻辑来实现这一点。
而绑定将类似于:
<TabItem DataContext="{Binding UsbDevicesCollection.Library}"/>
希望这就是您要找的。很高兴我能帮忙:)很高兴我能帮忙:)