Использование WPF для заполнения сетки данных и добавление флажков для применения фильтра

Совершенно новый для WPF, я пытаюсь заполнить сетку данных данными из таблицы SQL. И как только данные будут заполнены, используйте флажки, чтобы создать фильтр, чтобы можно было фильтровать сетку данных.

На данный момент это то, что у меня есть.

<Window x:Class="WpfApp2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp2"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <CheckBox Content="QA" HorizontalAlignment="Left" Margin="82,58,0,0" VerticalAlignment="Top" Checked="CheckBox_Checked"/>
        <CheckBox Content="DEV" HorizontalAlignment="Left" Margin="82,27,0,0" VerticalAlignment="Top"/>
        <CheckBox Content="LAB" HorizontalAlignment="Left" Margin="82,94,0,0" VerticalAlignment="Top"/>
        <CheckBox Content="UAT" HorizontalAlignment="Left" Margin="173,27,0,0" VerticalAlignment="Top"/>
        <CheckBox Content="Pre-Prod" HorizontalAlignment="Left" Margin="173,62,0,0" VerticalAlignment="Top"/>
        <Button Content="Apply" HorizontalAlignment="Left" Margin="82,140,0,0" VerticalAlignment="Top" Width="75"/>
        <DataGrid HorizontalAlignment="Left" Height="181" Margin="82,202,0,0" VerticalAlignment="Top" Width="679"/>
    </Grid>
</Window>

person learner    schedule 28.11.2020    source источник
comment
У вас нет привязок к свойствам,   -  person Ilan Keshet    schedule 29.11.2020
comment
Кроме того, я предполагаю, что флажок, который вы хотите установить внутри DataGrid, -- не над ним.   -  person Ilan Keshet    schedule 29.11.2020
comment
Что касается этого... [Совершенно новый для WPF], это нормально, но это также означает, что вам действительно следует потратить время на наращивание UX / UI с использованием собственно WPF и отойти от PowerShell для этих усилий. Посмотрите видео UX/UI WPF на Youtube для этого обучения. Хороший WPF с использованием серии PowerShell находится здесь: dev4sys.com и его репозиторий здесь: github.com/dev4sys   -  person postanote    schedule 29.11.2020


Ответы (1)


У меня нет среды, чтобы попробовать то, что вам нужно с SQL, но данные есть данные.

Итак, вот простой пример WPF, использующий Datagrid, с флажками, выполняемыми через PowerShell. Он загружает форму, ждет нажатия кнопки и заполняет Datagrid данными и отмеченными и снятыми флажками.

Function Show-DataGrid 
{
[xml]$XAML = @"
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  Title="Services List" Height="261.541" Width="423.299" ResizeMode="NoResize" BorderBrush="Black" Background="White">
    <Window.Effect>
        <DropShadowEffect/>
    </Window.Effect>
    <Grid>
        <DataGrid Name="dataGrid" AutoGenerateColumns="False" AlternationCount="1" SelectionMode="Single" IsReadOnly="True" HeadersVisibility="Column" Margin="10,32,10,10" AlternatingRowBackground="#FFD8D8D8" CanUserResizeRows="False" >
            <DataGrid.Columns>
                <DataGridCheckBoxColumn Binding="{Binding checkboxChecked, UpdateSourceTrigger=PropertyChanged}">
                    <DataGridCheckBoxColumn.ElementStyle>
                        <Style TargetType="CheckBox"/>
                    </DataGridCheckBoxColumn.ElementStyle>
                </DataGridCheckBoxColumn>
                <DataGridTextColumn Header="Common Name" Width="125" Binding="{Binding CName}"/>
                <DataGridTextColumn Header="Service Name" Width="125" Binding="{Binding SName}"/>
                <DataGridTextColumn Header="Current Status" Width="125"  Binding="{Binding Status}"/>
            </DataGrid.Columns>
        </DataGrid>
        <Button Name="GenerateButton" Content="Generate" HorizontalAlignment="Left" Margin="10,7,0,0" VerticalAlignment="Top" Width="75"/>
    </Grid>
</Window>
"@
    
Add-Type -AssemblyName  System.Drawing,
                        PresentationCore,
                        PresentationFramework,
                        System.Windows.Forms,
                        microsoft.VisualBasic
[System.Windows.Forms.Application]::EnableVisualStyles()

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

$xaml.SelectNodes("//*[@Name]") | 
ForEach-Object {Set-Variable -Name "WPF_$($_.Name)" -Value $Form.FindName($_.Name) -Scope Script}

$CurrServices = Get-Service | 
                Select DisplayName, Name, StartType

[System.Collections.ArrayList]$CBNameList = @()

$WPF_GenerateButton.Add_Click(
{ 
$DataGridList = @"
checkboxChecked,CName,SName,Status
$true,Test,Checked,Checked
$true,Test 2,Checked 2,Checked 2
$false,Test 3,NOT Checked,Checked
$false,Test 4,NOT Checked,Checked
$true,Test 5,Checked!,Checked
"@ | 
ConvertFrom-Csv

    $WPF_dataGrid.ItemsSource = $DataGridList
    $WPF_dataGrid.items.Refresh()

})

$Form.ShowDialog() | 
Out-Null
}

Show-DataGrid 
person postanote    schedule 29.11.2020