首页 文章

如何使用依赖于ListBox的SelectedItem将Combobox绑定到ObservableCollection?

提问于
浏览
0

我有一个组合框,它使用Bindings从自定义类型的ObservableCollection中绘制它的项目 . 我已经设置了DisplayMemberPath,因此它显示了正确的字符串和内容 . 现在我正在摆弄SelectedItem / SelectedValue . 它需要依赖于ListBox的选定项,ListBox绑定到另一个自定义类型的不同ObservableCollection,但它具有与ComboBox列表相同类型的属性 .

如何使用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;
    }
}

和我的ComboBox的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"
    >

1 回答

  • 0

    好吧,我通过更改Connection to Plugin中的IPlugin类型解决了这个问题 . 为什么我首先在那里使用IPlugin是我所不知道的 . 但是像这样,我到处都有相同类型的插件 .

    感谢您的帮助,感激不尽

相关问题