Hallo,
ich arbeite mich gerade in WPF ein und stehe vor dem ersten grossen Problem wo ich nicht weiß wie ich es genau angehen muss bzw. wo mein Fehler ist.
Ich habe eine ListView welche mit ListViewItems dynamisch über C# gefüllt werden soll. Allerdings sind es nicht einfache ListViewItems sondern eine eigene Klasse welche von ListViewItem abgeleitet ist.
Nun habe ich mir noch ein ResourceDictionary zugelegt in welchem ich ein Template für das abgeleitete ListViewItem erstellt habe.
Das ListViewItem soll so aussehen das vorne ein Bild ist und dahinter ein Text.
(Das ResourceDictionary ist in der App.xaml in <Application.Resources> eingebunden)
Mein Problem:
Wie schaffe ich es ein Databinding zu erstellen, welches mir die zwei Variablen, für das Bild und den Text, aus der abgeleiteten Klasse in die Ansicht überträgt.
Der Code sieht folgendermaßen aus:
Das ResourceDictionary:
Die abgeleitete Klasse:
Ich habe es soweit geschaft das ich über
schonmal den Text darstellen kann. Allerdings auch nur weil ich mit
auf das vererbte Attribut Content zugreife.
Ich möchte nun die Variablen
in meinem Template darstellen.
Ich habe schon verschiedene Sachen ausprobiert aber der Text wird mir dann einfach nicht angezeigt. Das Problem ist das ich nicht genau weiß wie ich dieses Databinding in dem template syntaktisch schreiben muss das es das macht was ich möchte xD.
(Setter/Getter muss ich natürlich auf m_strDisplayText umstellen)
Weiß jemand wie das geht und kann mir einen Ratschlag geben?
Bin für jeden Tip dankbar
Gruss
Edit:
Das template wird über
Style cStyle = (Style)FindResource("PriListViewItemStyle");
dem dynamisch erstellten Objekt zugeteilt
ich arbeite mich gerade in WPF ein und stehe vor dem ersten grossen Problem wo ich nicht weiß wie ich es genau angehen muss bzw. wo mein Fehler ist.
Ich habe eine ListView welche mit ListViewItems dynamisch über C# gefüllt werden soll. Allerdings sind es nicht einfache ListViewItems sondern eine eigene Klasse welche von ListViewItem abgeleitet ist.
Nun habe ich mir noch ein ResourceDictionary zugelegt in welchem ich ein Template für das abgeleitete ListViewItem erstellt habe.
Das ListViewItem soll so aussehen das vorne ein Bild ist und dahinter ein Text.
(Das ResourceDictionary ist in der App.xaml in <Application.Resources> eingebunden)
Mein Problem:
Wie schaffe ich es ein Databinding zu erstellen, welches mir die zwei Variablen, für das Bild und den Text, aus der abgeleiteten Klasse in die Ansicht überträgt.
Der Code sieht folgendermaßen aus:
Das ResourceDictionary:
Code:
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:priui="clr-namespace:PrimeUI">
<Style x:Key="PriListViewItemStyle" TargetType="{x:Type priui:PriListViewItem}">
<Setter Property="FontSize" Value="22"></Setter>
<Setter Property="Foreground" Value="Blue"></Setter>
<Setter Property="FontFamily" Value="Verdana"></Setter>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type priui:PriListViewItem}">
<Border SnapsToDevicePixels="True">
<Grid x:Name="MainGrid">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Image x:Name="imJob" Grid.Column="0" Grid.Row="0" Width="Auto"/>
<TextBlock Text="{TemplateBinding Content}" Width="Auto" Grid.Row="0" Grid.Column="1" x:Name="PriListViewItemContent">
</TextBlock>
</Grid>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter TargetName="MainGrid" Property="Background" Value="LightBlue"/>
</Trigger>
<Trigger Property="IsSelected" Value="False">
<Setter TargetName="MainGrid" Property="Background" Value="Green"/>
</Trigger>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="MainGrid" Property="Background" Value="Orange"/>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter TargetName="MainGrid" Property="Background" Value="LightGray" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
Die abgeleitete Klasse:
Code:
namespace PrimeUI
{
public class PriListViewItem : ListViewItem
{
protected Image m_imIcon = new Image();
protected String m_strDisplayText = "";
public PriListViewItem()
{ }
public String DisplayText
{
get
{
return (String)Content;
}
set
{
Content = value;
}
}
}
}
Ich habe es soweit geschaft das ich über
Code:
<TextBlock Text="{TemplateBinding Content}" Width="Auto" ...
schonmal den Text darstellen kann. Allerdings auch nur weil ich mit
Code:
public String DisplayText
{
get
{
return (String)Content;
}
set
{
Content = value;
}
}
auf das vererbte Attribut Content zugreife.
Ich möchte nun die Variablen
Code:
protected Image m_imIcon = new Image();
protected String m_strDisplayText = "";
in meinem Template darstellen.
Ich habe schon verschiedene Sachen ausprobiert aber der Text wird mir dann einfach nicht angezeigt. Das Problem ist das ich nicht genau weiß wie ich dieses Databinding in dem template syntaktisch schreiben muss das es das macht was ich möchte xD.
(Setter/Getter muss ich natürlich auf m_strDisplayText umstellen)
Weiß jemand wie das geht und kann mir einen Ratschlag geben?
Bin für jeden Tip dankbar

Gruss
Edit:
Das template wird über
Style cStyle = (Style)FindResource("PriListViewItemStyle");
dem dynamisch erstellten Objekt zugeteilt
Zuletzt bearbeitet: