XamDataTree を使用しており、ノードのタイプごとに異なるイメージを持つノード アイコンが必要です。私はインフラジスティックスでこれを尋ねてみましたが、私たちはお互いを理解していません:(
また、問題はもはや彼らのコントロールとは何の関係もありません。それは、モデルに保存された画像を表示する方法に関するものです。はい、これは MVVM の原則に反していますが、これが画像を表示する唯一の実行可能な方法です。
注: 回避策があります。Label を使用してノードの内容を指定し、その中に画像とノード テキストを含む水平スタックパネルを配置します。しかし、これはくだらないです。XamDataGrid オブジェクトに画像を表示させたいのです。
ここに表示する 28 の異なる画像があり、そのうちのいくつかは動的に作成されます。そのため、ファイルパスで画像をロードしてから別のテンプレートを使用する、さまざまなテンプレートを大量に作成したくありません。
XamDataTree は、Element 名や!でバインドも指定してみました。. モデルから直接、または 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 に画像を直接読み込んでから、モデルに保存しようとしましたが、うまくいきませんでした。より高いデバッグ レベルのメッセージングを使用すると、データ バインディングが対応するプロパティを見つけられないというメッセージが出力にポストされます。したがって、問題は私のデータバインディングにある可能性が最も高いです。