WPF的GUI思想,虽然不知道如何实现它

Daa*_*mer 1 c# wpf user-interface

我所得到的是basicly两个类PluginPluginLauncher

插件是一个抽象类,它实现了一些函数,使类成为PluginLauncher类的插件.

PluginLauncher是一个包含集合(SortedDictionary)的类,包括一些帮助函数来启动,停止,重启所有或特定的插件.

它还在初始化时加载所有插件.每个插件都可以是.exe或.dll,其类继承自Plugin.为每个插件创建一个AppDomain,并为每个插件设置通信(通过套接字通过简单的IPC消息传递)(仍然必须实现)

我希望有一个非常非常基本的GUI实现,它只包含所有已加载的插件的列表,注意插件名称,状态(可以运行,停止,停止,已经过早停止(一个枚举))和每个插件的按钮启动,停止或重新启动它.

我知道我可以通过在GUI上放置元素并计算每个X/Y位置等来添加程序功能,但我确信WPF有一些预制的'功能'.但我对WPF很新,并且不知道从哪里开始寻找.

一个简单的说明:我被限制为.net 3.5(或更低)因此没有4.0元素.

我已经包含了一个非常简单(万岁的mspaint技能)的例子.

我想到的简单的MSPaint技巧

Ken*_*art 5

您的应用程序的插件性质与您实现此目标的机制几乎没有关系.基本上,您需要一组视图模型.该集合中的每个项目代表一个插件(但它同样可以代表客户或鸡腿).然后绑定ItemsControl到此集合并定义项目应如何呈现的模板.

这里有一些伪代码可以帮助您:

public class PluginViewModel : ViewModel
{
    public string Name { get; }
    public PluginState State { get; private set; }
    public ICommand StartCommand { get; }
    public ICommand StopCommand { get; }
    public ICommand RestartCommand { get; }
}

public class PluginLauncherViewModel : ViewModel
{
    // use an ObservableCollection<PluginViewModel> to store your plugin view models
    public ICollection<PluginViewModel> Plugins { get; }
}

<ScrollViewer>
    <ItemsControl ItemsSource="{Binding Plugins}">
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                 <UniformGrid Rows="1">
                     <TextBlock Text="{Binding Name}"/>
                     <TextBlock Text="{Binding Status}"/>
                     <Button Command="{Binding StartCommand}">Start</Button>
                     <Button Command="{Binding StopCommand}">Stop</Button>
                     <Button Command="{Binding RestartCommand}">Restart</Button>
                 </UniformGrid>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
</ScrollViewer>
Run Code Online (Sandbox Code Playgroud)

毫无疑问,你会遇到一些问题:

  • 所述DataContext外XAML的(即在ScrollViewer在我的上述例子)必须的一个实例PluginLauncherViewModel.如何连接它取决于你,并有各种选择.从简单的事情开始,比如在代码隐藏中设置它.
  • ViewModel是所有视图模型的基类.请看这里的例子.
  • 您对ICommand的实现应该是MVVM友好的.请看这里的例子.