我正在使用XamDataTree,並且我需要節點圖標爲每種類型的節點都有不同的圖像。我嘗試asking this on Infragistics,但我們不明白對方:(從ViewModel綁定圖像
此外問題實際上與他們的控制無關,它是關於如何獲取存儲在模型中的圖像顯示。是的,這是針對但是這是顯示圖像的唯一可行的方法。
注意:我有一個解決方法,使用Label來指定節點內容並在其中放置一個水平堆棧面板,其中包含圖像和節點文本但是這很糟糕,我想讓XamDataGrid對象顯示圖像。
有28種不同的圖像顯示在這裏,其中一些是動態創建的,所以我不想做一個噸的不同模板,通過文件路徑加載圖像,然後使用不同的模板。
XamDataTree,我也嘗試指定與元素名稱或!綁定。 我試圖直接從模型或通過一個DataTemplate加載圖像:
<ig:XamDataTree
ScrollViewer.CanContentScroll="True"
ItemsSource="{Binding Model}"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
NodeLineVisibility="Visible"
>
<ig:XamDataTree.Resources>
<DataTemplate x:Key="nodeImage" >
<Image Source="{Binding Path=NodeImage}" />
</DataTemplate>
</ig:XamDataTree.Resources>
<ig:XamDataTree.GlobalNodeLayouts>
<ig:NodeLayout
ExpandedIconTemplate="{StaticResource nodeImage}"
CollapsedIconTemplate="{Binding NodeImage}"
Key="Children"
DisplayMemberPath="Name"
TargetTypeName="Model"
>
</ig:NodeLayout>
</ig:XamDataTree.GlobalNodeLayouts>
</ig:XamDataTree>
,我使用的模型,所述圖像源值被設置在別處:
public class Model
{
/// <summary>
/// Image representing the type of node this is.
/// </summary>
public ImageSource NodeImage
{
get
{
return this.nodeImage;
}
set
{
this.nodeImage = value;
this.OnPropertyChanged("NodeImage");
}
}
/// <summary>
/// Controls will bind their attributes to this event handler.
/// </summary>
public event PropertyChangedEventHandler PropertyChanged;
/// <summary>
/// Fire an event alerting listners a property changed.
/// </summary>
/// <param name="name">Name of the property that changed.</param>
public void OnPropertyChanged(string name)
{
// Check whether a control is listening.
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(name));
}
}
}
編輯: 我嘗試將文件直接從文件加載到BitmapImage中,然後將它們存儲在模型中,不起作用。當使用更高的調試級別消息時,它在輸出中發佈數據綁定無法找到相應屬性的消息。所以這個問題很可能在我的數據綁定中。
一些圖像的動態創建。 – MrFox 2013-03-15 11:00:52
你是什麼意思動態?你把它們存儲在FileSystem中嗎?可能是你應該更新你的答案如何創建圖像 – Jehof 2013-03-15 11:01:57
我組合不同的圖像來創建新的展示。這可以預先完成。但是這不會導致每次從磁盤加載每個映像?而不是從磁盤加載一次圖像,構建另一個圖像,並在許多地方使用它們。 – MrFox 2013-03-15 11:04:00