| 

.NET C# Java Javascript Exception

1
Hallo zusammen,

nach stundenlangem vergeblichen Suchen und Probieren hoffe ich, dass mir hier jemand helfen kann.

Ich konvertiere gerade ein WindowsForms "InterfaceMonitor" in WPF. Alles läuft soweit problemlos mit Ausnahme der bedingten Formatierung einzelner Zellen.

Das DataGrid hat folgende Spalten:

[Customer], [Customer_Description], [Sales], [Stock], [Order],...

Ich möchte die Spalten [Sales], [Stock], [Order] in grün highlighten wenn der Wert größer 0 ist, sonst in rot.

XAML:

<Window x:Class="InterfaceMonitor.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:src="clr-namespace:InterfaceMonitor"
Title="MainWindow">

<Window.Resources>
<src:ConditionalValueConverter x:Key="ConditionalValueConverter" />
</Window.Resources>

<Grid Margin="0,0,-8,0" Height="443" VerticalAlignment="Top">
<Grid.ColumnDefinitions>

<ColumnDefinition Width="268*"/>
</Grid.ColumnDefinitions>

<DatePicker x:Name="picker" HorizontalAlignment="Left" Margin="30,30,0,0" VerticalAlignment="Top" RenderTransformOrigin="0.472,-2.048" Height="24" Width="129" FontSize="14" SelectedDateChanged="picker_SelectedDateChanged"/>

<Label Content="Interface Monitor" HorizontalAlignment="Left" Height="46" Margin="178,18,0,0" VerticalAlignment="Top" Width="318" FontSize="24" FontWeight="Bold"/>

<DataGrid x:Name="DGV" AutoGenerateColumns="True" HorizontalAlignment="Stretch" Height="Auto" Margin="30,98,30,30" VerticalAlignment="Top" Width="Auto">

<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="Gray" />
</Trigger>
</Style.Triggers>
</Style>
</DataGrid.RowStyle>

<DataGrid.CellStyle>
<Style TargetType="DataGridCell">
<!--DataTrigger with Binding to ConditionalValue Converter-->
</Style>
</DataGrid.CellStyle>
</DataGrid>

</Grid>
</Window>


C#

namespace InterfaceMonitor
{

public partial class MainWindow : Window
{

...

}

....


public class ConditionalValueConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{

if (value.ToString() == String.Empty)
return null;

int val = 0;
int.TryParse(value as String, out val);

return (val < 0) ? Brushes.Red : Brushes.Green;

}

public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}

}


Mein erstes Problem ist, ich bekomme die Fehlermeldung "Der Name "ConditionalValueConverter" ist im Namespace "clr-namespace:InterfaceMonitor" nicht vorhanden." obwohl die Klasse im Namespace enthalten ist.

Zudem habe ich das Problem ein Binding zum data trigger des ConditionalValueConverter zu erstellen.

Vorab schon einmal vielen Dank!
Thomas
19.04.2015
1 Antwort
0
Ich weiß nicht, warum diese Lösung bei dir nicht funktioniert. An deiner Stelle würde ich aber einen DataTemplateSelector verwenden.
Du definierst einfach ein Template für Werte größer 0 und eines für Werte kleiner 0. Die Logik wann welches Template verwendet werden soll, steckt dann im DataTemplateSelector.

Beispiel dazu kannst du u.a. hier finden.
20.04.2015
multi1209 848 1 8

Stelle deine --Frage jetzt!