DataTemplate Triggers im Button?(Silverlight)



  • <Grid x:Name="LayoutRoot">        
            <Border BorderBrush="Gray" BorderThickness="1">
                <ScrollViewer>
                    <StackPanel>
    
                        <StackPanel Orientation="Horizontal">
                            <TextBlock Text="Angemeldet als: " Foreground="Black" FontSize="16" />
                            <TextBlock x:Name="textblock_user" Text="" Foreground="#e65a0a" FontSize="16" FontWeight="Bold"/>
                            <Button x:Name="aktuallisieren" Content="Aktuall" Click="aktuallisieren_Click" Height="100" Width="50"/>
                        </StackPanel>
    
                        <TextBlock Text="Wählen Sie den Zielrechner aus,der hochgefahren werden soll:" Foreground="#e65a0a" FontSize="16" Margin="8 8 8 20"/>
                        <data:DataGrid x:Name="datagridView">
                            <data:DataGrid.Columns>
                                <data:DataGridTemplateColumn Header="Aktion">
                                    <data:DataGridTemplateColumn.CellTemplate>
                                        <DataTemplate>
                                            <Button x:Name="btn_hochfahren" Content="hochfahren" Click="Button_Click"/> 
                                            <DataTemplate.Triggers>
                                                <Trigger SourceName="{Binding Status}" Value="Success">
                                                    <Setter TargetName="btn_hochfahren" Property="Enabled" Value="false"/>
                                                </Trigger>
                                            </DataTemplate.Triggers>
                                        </DataTemplate>
                                    </data:DataGridTemplateColumn.CellTemplate>
                                </data:DataGridTemplateColumn>                            
                            </data:DataGrid.Columns>
                        </data:DataGrid>                    
                    </StackPanel>
                </ScrollViewer>            
            </Border>
        </Grid>
    

    Ich dachte da an sowas.Jedoch bekam ich dann folgende Fehlermeldung:

    Fehler 1 The property 'Triggers' does not exist on the type 'DataTemplate' in the XML namespace 'http://schemas.microsoft.com/winfx/2006/xaml/presentation'.
    Fehler 2 The tag 'Trigger' does not exist in XML namespace 'http://schemas.microsoft.com/winfx/2006/xaml/presentation'.
    Fehler 3 The property 'TargetName' does not exist on the type 'Setter' in the XML namespace 'http://schemas.microsoft.com/winfx/2006/xaml/presentation'.

    ?Hab ich ihn an der falschen seite gesetzt.Laut Fehlermeldung fehlen mir ja die Namespaces, jedoch sind es doch die Standardnamespaces oder?



  • merkwuerdig
    kannst du solch ein trigger in einer einfachen listbox in der selben xaml setzen ?



  • Kein Erfolg.



  • dann stimmt was mit deiner xaml nicht
    zeig ma den header
    DataContext.Triggers gibts doch - wuesste nicht warum er des nicht findet /=



  • <navigation:Page x:Class="WOL.Views.UserView" 
               xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
               xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"
               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"
               mc:Ignorable="d"
               xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
    

    Fehlt ne Assambly? Ich dacht die wären im Standard namespace mit drinne.



  • Benutz doch nen Style für den Button der ausgeblendet werden soll und dort setzt du den Trigger rein. Das Datatemplate direkt ist der falsche Ort dafür.

    Außerdem wirst du wahrscheinlich noch nen IValueConverter brauchen um deinen String "sucess" in nen Objekt IPStatus zu konvertieren um die dann im Trigger vergleichen zu können.



  • Hmm gute Idee. Danke 😉



  • wenn du eh n converter schreiben musst - warum dann nicht gleich ein converter von IPStatus -> Boolean ?

    kannst dann direkt ohne style das IsEnabled binden und convertieren

    <Button Content="hochfahren" Click="Button_Click" IsEnabled="{Binding Status, Converter={StaticResource statusToBoolean}}" />



  • Ok ich hab nun ein IValueConverter.

    public class IPStatusConverter : IValueConverter
        {
    
            #region IValueConverter Member
    
            public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
            {
                WOL.SQLDataService.IPStatus status = (WOL.SQLDataService.IPStatus)value;
                if (status == WOL.SQLDataService.IPStatus.Success)
                    return true;
                return false;
            }
    
            public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
            {
                bool succes = (bool)value;
                if (succes)
                    return WOL.SQLDataService.IPStatus.Success;
                return WOL.SQLDataService.IPStatus.Unknown;
            }
    
            #endregion
        }
    

    Der steht nun in einer Seperaten Klasse,wie krieg ich nun aber auf diese Klasse und den Converter bezug in meiner XAML von meiner einen Page?



  • als resource hinzufuegen

    <page xmlns:converter="...">
        <page.Resources>
            <converter:IPStatusConverter x:Key="ipStatusConverter" />
        </page.Resources>
        <bla bla="{Binding ..., Converter={StaticResoure ipStatusConverter}}" />
    </page>
    

    //tag vergessen



  • Haaa, naklar, hatte nur nich dran gedacht das es als Ressource rein muss.
    Vielen Danke. Hab das erwünschte Ziel erreicht.


Anmelden zum Antworten