Ich habe ein WPF-Projekt, das, so gut ich kann, das MVVM-Muster verwendet. Ich verwende Visual Studio 2010, und die Sprache dahinter ist C#.WPF BitmapImage wird nicht angezeigt
So habe ich eine Baumansicht. Die treeview sieht wie folgt aus:
<TreeView Grid.Column="0" Width="Auto" Background="Aquamarine" ItemsSource="{Binding Scenes}" SelectedItemChanged="TreeView_SelectedItemChanged">
<TreeView.DataContext>
<viewModels:ScenesViewModel />
</TreeView.DataContext>
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Characters}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding SceneName}"></TextBlock>
<Image Source="{StaticResource ImgWorld}" Margin="0,0,5,0" Width="32" Height="32"/>
</StackPanel>
<HierarchicalDataTemplate.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding FirstName}"></TextBlock>
<Border BorderThickness="1" Background="RoyalBlue">
<Image Source="{Binding ImgIcon}" Margin="2"/>
</Border>
</StackPanel>
</DataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
Der Streitpunkt ist das Bild, die Quelle, von denen etwas ‚ImgIcon‘ genannt gebunden ist. Dies ist eine Eigenschaft eines Ansichtsmodells namens "CharacterViewModel". Aus irgendeinem Grund bekomme ich nichts angezeigt wo das Bild sein sollte.
Das offensichtlichste Problem könnte in Bezug auf den Datenkontext sein oder ob die MVVM-Seite der Dinge funktioniert. Ich bin mir ziemlich sicher, dass es einen TextBlock neben dem Image gibt, der auch an eine Eigenschaft mit dem Namen 'FirstName' gebunden ist. Diese Bindung funktioniert gut.
Die beiden Eigenschaften sind natürlich in der View-Modell, und kann hier gesehen werden:
public String FirstName
{
get { return Character.FirstName; }
set
{
if (Character.FirstName != value)
{
Character.FirstName = value;
RaisePropertyChanged("FirstName");
}
}
}
private BitmapImage _imgIcon = null;
public BitmapImage ImgIcon
{
get { return _imgIcon; }
set
{
_imgIcon = value;
RaisePropertyChanged("ImgIcon");
}
}
Sie sind, dass etwas anders letztere wickeln nicht in der Zeichenklasse um eine Immobilie.
Also der nächste mögliche Fehler wäre das Laden des Bildes. Dies wird durch dieses Verfahren erreicht (die im Moment nur einen Prüfpfad für eine bekannte Arbeitsdatei hat):
public bool LoadIcon()
{
if (ImgIcon == null)
{
Uri outUri;
if (Uri.TryCreate(@"D:\Pictures\Icons\HCAria01.png", UriKind.Absolute, out outUri))
{
}
ImgIcon = new BitmapImage(outUri);
return true;
}
else
return false;
}
ich einen Haltepunkt setzen in auf ‚ImgIcon = new Bitmap (outUri)‘ und Sie können sehen, die relevanten Informationen hier: picture. Es scheint von diesem Bild aus, dass das Bild erfolgreich geladen wurde.
Ich bin sicher, ich vermisse etwas offensichtlich, aber ich bin verdammt, wenn ich sagen kann, was es ist. Von meiner begrenzten Erfahrung mit WPF und XAML scheint es zu funktionieren, außer dem Mangel an einem Bild.
Nun, wenn Sie jede Hilfe anbieten können, die sehr geschätzt wäre.
Bearbeiten: ein paar Klarstellungen. Der DataContext für die Baumansicht heißt ScenesViewModel. Dies enthält eine Liste von SceneViewModel, und diese Liste heißt "Szenen". Jedes SceneViewModel enthält eine Liste von CharacterViewModel mit dem Namen "Characters". These two images zeigen den relevanten Teil dieser Klassen, so dass hoffentlich die Hierarchie verstanden werden kann. Für jedes CharacterViewModel sollte ein ImgIcon vorhanden sein.
Von einem kurzen Blick, da das Bild in Code geladen wird, würde ich überprüfen, Ihr Kontext ist eigentlich Ihr Objekt mit der 'ImgIcon' -Eigenschaft und nicht Ihr' Character' Objekt, das genau den gleichen Namen für FirstName hat. – TyCobb