我有一個WPF項目,盡我所能使用MVVM模式。我使用Visual Studio 2010,而後面的語言是C#。WPF BitmapImage not display
所以我有一個treeview。樹形視圖看起來是這樣的:
<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>
爭論的焦點是圖像,其源綁定到一種叫做「ImgIcon」。這是名爲'CharacterViewModel'的視圖模型的屬性。出於某種原因,我沒有在圖像應該顯示的地方顯示任何內容。
最明顯的問題可能是關於數據上下文或事物的MVVM方面是否工作。我相當確定它是,因爲在圖像旁邊有一個TextBlock,它也被綁定到一個名爲'FirstName'的屬性。這個綁定工作正常。
兩個屬性是的,當然,在視圖模型,可以看這裏:
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");
}
}
他們是後者,也沒有以產權換Character類略有不同。
所以下一個可能的錯誤將是圖像的加載。這是通過這個方法(這在目前只是有一個已知的工作文件中的測試路徑)來完成:
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;
}
我把一個破發點中的「ImgIcon =新的BitmapImage(outUri)」,你可以看到相關信息在這裏:picture。從這幅圖看來,圖像已成功加載。
我確定我錯過了一些明顯的東西,但如果我能說出它是什麼,我會很尷尬。從我對WPF和XAML的有限經驗來看,除了缺少圖像外,它似乎工作正常。
那麼,如果你能提供任何幫助,將不勝感激。
編輯:一些澄清。 Treeview的DataContext稱爲ScenesViewModel。它包含一個SceneViewModel列表,該列表被稱爲「場景」。每個SceneViewModel都包含一個CharacterViewModel列表,稱爲'Characters'。 These two images顯示這些類的相關部分,所以希望層次結構可以被理解。對於每個CharacterViewModel,應該有一個ImgIcon。
自從Image在代碼中加載後,我會用'ImgIcon'屬性仔細檢查你的上下文實際上是你的對象,而不是你的'Character'對象,它具有與FirstName完全相同的屬性名稱。 – TyCobb