0
我有一個組合框,它使用綁定從自定義類型的ObservableCollection中繪製它的項目。我已經設置了DisplayMemberPath,以便顯示正確的字符串和內容。現在我擺弄SelectedItem/SelectedValue。它需要依賴於列表框的選定項目,該列表框綁定到另一個自定義類型的不同ObservableCollection,但具有與ComboBox列表相同類型的屬性。如何將Combobox綁定到依賴於ListBox的SelectedItem的ObservableCollection上?
我該如何使用MVVM綁定?它甚至有可能嗎?
我有我的代碼在這裏:
MainWindowViewModel.cs
private ObservableCollection<Plugin<IPlugin>> erpPlugins;
public ObservableCollection<Plugin<IPlugin>> ERPPlugins
{
get
{
return erpPlugins;
}
set
{
erpPlugins = value;
OnProprtyChanged();
}
}
private ObservableCollection<Plugin<IPlugin>> shopPlugins;
public ObservableCollection<Plugin<IPlugin>> ShopPlugins
{
get
{
return shopPlugins;
}
set
{
shopPlugins = value;
OnProprtyChanged();
}
}
private ObservableCollection<Connection> connections;
public ObservableCollection<Connection> Connections
{
get {
return connections;
}
set
{
connections = value;
}
}
public MainWindowViewModel()
{
instance = this;
ERPPlugins = new ObservableCollection<Plugin<IPlugin>>(GenericPluginLoader<IPlugin>.LoadPlugins("plugins").Where(x => x.PluginInstance.Info.Type == PluginType.ERP));
ShopPlugins = new ObservableCollection<Plugin<IPlugin>>(GenericPluginLoader<IPlugin>.LoadPlugins("plugins").Where(x => x.PluginInstance.Info.Type == PluginType.SHOP));
Connections = new ObservableCollection<Connection>
{
new Connection("test") { ERP = ERPPlugins[0].PluginInstance, Shop = ShopPlugins[0].PluginInstance } // Debug
};
}
Connection.cs
public class Connection
{
public string ConnectionName { get; set; }
public IPlugin ERP { get; set; }
public IPlugin Shop { get; set; }
public Connection(string connName)
{
ConnectionName = connName;
}
}
我的組合框的XAML片段:
<ComboBox
Margin="10,77,232,0"
VerticalAlignment="Top"
x:Name="cmbERP"
ItemsSource="{Binding ERPPlugins}"
SelectedItem="{Binding ElementName=lbVerbindungen, Path=SelectedItem.ERP}"
DisplayMemberPath="PluginInstance.Info.Name"
>
'SelectedItem.ERP'必須的東西,CLR將考慮等於'ERPPlugins'的項目(或一個的屬性,如果你用'去的SelectedValue ')。它可以是一個值類型或字符串,或者是一個實際在'ItemsSource'集合中的引用類型,或者你可以覆蓋'Equals'。如果'IPlugin'具有任何類型的值類型('int','Guid'等等)或'String'的唯一ID屬性,我寧願使用'SelectedValue' /'SelectedValuePath'。在參考類型上重寫Equals可以在代碼中的其他地方咬你。但它是作爲最後的手段。 –
IIRC綁定將使用IEquatable(如果已實施)在實例之間進行比較。 – Will
@我剛剛測試過。有些東西叫'IEquatable .Equals(T)',但只有當我重寫'Equals(Object)'時纔會選擇所選項目,並且我不需要'IEquatable'來工作。 –