扩展的WPF工具包/ PropertyGrid:使用带有* sealed *类的ExpandableObjectConverter(?)

时间:2012-09-25 22:01:22

标签: c# xaml propertygrid

这是我的第一篇文章,所以我希望我做的一切都是正确的。

我正在尝试将XAML/WPF PropertyGrid绑定到IList< LivePacketDevice>,这有效,但我希望其中一些属性看起来不同。

从我收集的内容来看,有多种方法。最简单的方法之一是扩展LivePacketDevice类以包含[ExpandableObject] Attribute。但是这个类是密封所以在这种情况下我不能这样做。

此方法(http://www.codeproject.com/Articles/4448/Customized-display-of-collection-data-in-a-Propert)还包括修改实际类。似乎所有方法都修改了基类,或者更常见的是,创建一些从基类继承的包装器。

我的C#代码如下所示:

public partial class MainWindow : Window {
    public MainWindow() {
        Loaded += MainWindowLoaded;
        InitializeComponent();
    }

    private void MainWindowLoaded(object sender, RoutedEventArgs e) {
        // Retrieve the device list from the local machine
        statusText.Text = "Retrieving Interfaces";
        IList<LivePacketDevice> allDevices = LivePacketDevice.AllLocalMachine;

        if (allDevices.Count == 0) {
            lstInterfaces.IsEnabled = false;
            statusText.Text = "No interfaces found! Make sure WinPcap is installed.";
            return;
        }

        lstInterfaces.DisplayMemberPath = "Description";
        lstInterfaces.ItemsSource = allDevices;
        statusText.Text = "Interfaces retrieved. Select Item for additional Info.";
    }
}

和XAML:

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit" x:Class="TestApp.MainWindow"
    Title="MainWindow" Height="652" Width="918">
    <DockPanel x:Name="dockPanel1" VerticalAlignment="Stretch">
    <Menu DockPanel.Dock="Top" Height="Auto"/>
    <StatusBar DockPanel.Dock="Bottom">
        <TextBlock x:Name="statusText" />
    </StatusBar>
    <Grid>
        <ListBox x:Name="lstInterfaces" Height="216" VerticalAlignment="Top" Margin="10,35,10,0" />
        <xctk:PropertyGrid x:Name="prpgrInterface" Margin="10,256,10,0" VerticalAlignment="Top" Height="334" AutoGenerateProperties="False" SelectedObject="{Binding ElementName=lstInterfaces, Path=SelectedItem}">

        <xctk:PropertyGrid.PropertyDefinitions>
            <xctk:PropertyDefinition Name="Name" />
            <xctk:PropertyDefinition Name="Description" />
            <xctk:PropertyDefinition Name="Addresses" />
        </xctk:PropertyGrid.PropertyDefinitions>
        </xctk:PropertyGrid>
    </Grid>
    </DockPanel>
</Window>

如果我像这样运行它,我会在网格中获得3个“属性”,“名称”和“ “描述”很好,但是地址实际上是一个集合,应该是可扩展的,而它只是给了我“System.Collection.ObjectModel.ReadOnlyCollection`1 [PcapDotNet.Core.DeviceAddress]”,因为那似乎是{ {1}}方法返回。

为了完整起见,这里是我正在谈论的截图(新用户,无法建立实际链接)(http://zentarim.0wnz.at/~mram/imgdump/not%20the%20way %20I%20want%20it.png)

请记住,我对C#/ wpf的经验很少,所以代码示例必须相当完整才能对我有用:)也很抱歉非链接链接但是我不能发布超过两个目前。谢谢!

0 个答案:

没有答案