WPF PRISM 6 – EventToCommand Example

Benötigter Namespace:
xmlns:i=“http://schemas.microsoft.com/expression/2010/interactivity“

<i:Interaction.Triggers>
   <i:EventTrigger EventName="Loaded">
       <i:InvokeCommandAction Command="{Binding InitializeAnalyseViewCommand}" />
   </i:EventTrigger>
</i:Interaction.Triggers>

Einfügen innerhalb des Controls, bei dessen Event das Command ausgeführt werden soll.

WPF DataGrid – Beispiel DataGridTemplateColumn mit CheckBox und CommandBinding

 <DataGridTemplateColumn Header="Erledigt?" IsReadOnly="False">

                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>

                                <CheckBox Command="{Binding Path=DataContext.SetErledigtCommand,
                                                            RelativeSource={RelativeSource FindAncestor,
                                                                                           AncestorType={x:Type DataGrid}}}"
                                          CommandParameter="{Binding ElementName=DgSource,
                                                                     Path=SelectedItem}"
                                          IsChecked="{Binding DataContext.Erledigt,
                                                              UpdateSourceTrigger=PropertyChanged}" />



                            </DataTemplate>

                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>

 

WPF-Datagrid – Beispiel DataGridTemplateColumn mit Button

 <DataGridTemplateColumn Width="Auto"
                                            CanUserResize="False"
                                            Header="Löschen">
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>

                                <Grid DataContext="{Binding RelativeSource={RelativeSource Self}}">

                                    <Button Command="{Binding DataContext.DeleteKostenunterartCommand,
                                                              RelativeSource={RelativeSource FindAncestor,
                                                                                             AncestorType={x:Type DataGrid}}}"
                                            CommandParameter="{Binding SelectedItem,
                                                                       ElementName=DgSampleData}"
                                            Content="{iconPacks:PackIcon {x:Static iconPacks:PackIconFontAwesomeKind.MinusSquare}}"
                                           
                                            IsEnabled="{Binding DataContext.IsActivated,
                                                                RelativeSource={RelativeSource Mode=FindAncestor,
                                                                                               AncestorType=DataGridRow},
                                                                Converter={StaticResource BooleanToNotBooleanConverter}}"
                                             />

                                </Grid>

                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>

 

Splitten von kommaseparierten Zeichenfolgen in Oracle

SQL-Query zum Trennen von kommaseparierten Zeichenfolgen:

SELECT regexp_substr('SMITH,ALLEN,WARD,JONES','[^,]+', 1, LEVEL) 
FROM dual
CONNECT BY regexp_substr('SMITH,ALLEN,WARD,JONES', '[^,]+', 1, level) is not null;

Das Ergebnis der Abfrage ist wie folgt:

REGEXP_SUBSTR('SMITH,A
----------------------
SMITH
ALLEN
WARD
JONES

Ändert man den regulären Ausdruck

'[^,]+'

durch Ersetzen des Kommas, z.b.

'[^/]+'

wird als Trennzeichen der Slash verwendet.

Somit ist dies eine flexible und einfache Möglichkeit, Zeichenketten mit beliebigen Trennzeichen zu splitten und mit den einzelnen Werten weiterzuarbeiten.

Windows-Benutzerkennung in PL/SQL auslesen

Mit folgendem Code wird eine View erstellt, welche die Datensätze anhand des Benutzernamens filtert, der vom Client an den DB-Server übermittelt wird.

CREATE VIEW v_user_view AS 
SELECT col1, col2
FROM table
WHERE user_login = 
(
 SELECT LOWER((sys_context('USERENV', 'OS_USER'))) 
 FROM DUAL
);

Das Kernelement dieser Abfrage ist die Anweisung

sys_context('USERENV', 'OS_USER')

Diese gibt den Benutzernamen zurück, mit dem vom Client auf die View zugegriffen wird.

Da es sich bei der vorgenannten Anweisung um einen PL/SQL-Befehl handelt, habe ich diesen in eine SQL-Abfrage integriert. Somit wird ein Umgebungswechsel zwischen SQL und PL/SQL verhindert und die Performance der Abfrage erhöht sich bei großen Datenmengen deutlich.

Mit dieser Methode lassen sich dynamisch Views erstellen, die beispielsweise nur die Datensätze enthalten, die vom aktuellen Benutzer erstellt wurden.