Ciao,
il controllo Image ha la proprietà Source, questa è di tipo ImageSource, quindi puoi impostarla con un tipo BitmapSource.
Quando leggi nello xaml Source = "image.png", ovvero un percorso al posto del tipo ImageSource è perché viene poi caricato il file in runtime, il che significa che se vuoi fare il binding con una proprietà della classe che fa da DataContext devi crearla ad esempio di tipo BitmapImage e non di tipo stringa (con il percorso).
Oppure un altro modo per fare il binding può essere quello di creare una proprietà (sempre nel datacontext) di tipo string, ma in questo caso devi utilizzare un converter, ovvero una classe derivata da IValueConverter che esegua un override dei metodi Convert e ConvertBack, ad esempio :
file.cs
public partial class Window1 : Window
{
public Window1()
{
this.MyList = new List<string>(new string[] { "a", "b", "c" });
//Nome Immagine (con convertitore)
this.NomeImmagine = "close";
//immagine presa da file (senza convertitore)
this.ImageSource = new BitmapImage(new Uri("mioPath/miaImmagine.png"));
InitializeComponent();
}
public List<string> MyList { get; set; }
///con percorso stringa (con convertitore)
public string NomeImmagine { get; set; }
/// con immagine (senza stringhe e convertitori)
public BitmapImage ImageSource { get; set; }
}
Converter.cs
file.xaml
nell'esempio sopra do per scontato che ci sia una cartella Images nella soluzione, con queste vado a prendere il nome dal binding e lo uso come nome del file immagine, ma ovviamente deve essere presente... questo potrebbe essere comodo quando si vuole basare delle immagini in base ad esempio ad un nome, ma puoi anche farlo diversamente.
DA NOTARE NELLO XAML :
ho aggiunto un tag Converters che punta al namespace dei converters, ma il converter può essere anche nello stesso nameSpace locale, in quel caso non serve il tag converters ma userai il tag locale. Inoltre ho aggiunto nelle risorse della window il converter statico, infatti lo chiamo con StaticResource e il nome messo nella x:Key (Converter={StaticResource PathConverter})
un altro modo è quello di non usare il binding ed usare direttamente il nome file in stringa, ad esempio (sempre nella cartella images) :
<Image Source="/TuoNameSpace;component/Images/NomeFile.png" />
ovviamente se usi mvvm può andar bene solo con il convertitore.