2014-09-03 1 views
1

Я пытаюсь создать пользовательский интерфейс в PowerShell, который имеет DataGrid, который обновляется как исходные обновления, поэтому я использую ObservableCollection<PSObject>. Но когда я установил его как ItemsSource, DataGrid не генерирует никаких столбцов. Если я использую исходный массив, он делает это. Вот пример:Должен ли я использовать ObservableCollection [PSObject] в качестве источника данных DataGrid?

Add-Type -AssemblyName PresentationCore 
Add-Type -AssemblyName PresentationFramework 
Add-Type -AssemblyName WindowsBase 

[xml]$xaml = @" 
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" 
     Height="500" 
     Width="600"> 
    <Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="*" /> 
     <RowDefinition Height="*" /> 
    </Grid.RowDefinitions> 
    <DataGrid Grid.Row="0" 
       x:Name="dataGrid" 
       IsReadOnly="True" 
       Margin="6" /> 
    <DataGrid Grid.Row="1" 
       x:Name="observableDataGrid" 
       IsReadOnly="True" 
       Margin="6" /> 
    </Grid> 
</Window> 
"@ 

$reader = (New-Object System.Xml.XmlNodeReader $xaml) 
$Window = [Windows.Markup.XamlReader]::Load($reader) 

$dataGrid = $window.FindName("dataGrid") 
$observableDataGrid = $window.FindName("observableDataGrid") 

$results = Get-Process | Select-Object -Property ProcessName,Id,Handles,NPM,PM,VM,WS 

$results2 = New-Object -TypeName System.Collections.ObjectModel.ObservableCollection[PSObject] -ArgumentList @(,$results) 

$dataGrid.ItemsSource = $results 
$observableDataGrid.ItemsSource = $results2 

$Window.ShowDialog() | Out-Null 
+0

попробуйте установить автогенерирующие столбцы на true для datagrid и посмотреть, поможет ли это. также убедитесь, что в коллекции есть элементы, и у них есть свойства, поля могут не работать. – pushpraj

ответ

1

Решение было заменить ObservableCollection<PSObject> с ObservableCollection<Object>.

+0

Пожалуйста, не задавайте вопросов в ответах. Ответы зарезервированы для ответа на вопросы. – Sheridan

+0

Я удалил заявление. – user2871239

+0

Спасибо. Если вы все еще хотите знать, почему, тогда, пожалуйста, спросите об этом в своем вопросе. – Sheridan

Смежные вопросы