WPF’de Veri Bağlama ile Image UriSource
Bağlama: Kapsamlı Bir Kılavuz
WPF (Windows Presentation Foundation) dünyasında, veri bağlama bazen zorlu olabilir, özellikle görüntülerle çalışırken. Geliştiricilerin karşılaştığı yaygın bir sorun, bir Image
‘in UriSource
‘unu özel nesneler listesindeki bir property’e bağlamaktır. “Property ‘UriSource’ veya property ‘StreamSource’ ayarlanmalıdır,” hatasıyla karşılaştıysanız yalnız değilsiniz. Sorunu ve çözümü derinlemesine inceleyelim.
Sorunu Anlamak
Bir Image
kaynağını şu şekilde bağlamaya çalıştığınızda:
<Image>
<Image.Source>
<BitmapImage UriSource="{Binding Path=ImagePath}" />
</Image.Source>
</Image>
Görüntünün görüntülenmesini bekleyebilirsiniz, ancak bir property’nin ayarlanması gerektiğini belirten bir hata ile karşılaşabilirsiniz. Bu tipik olarak WPF’in Source
property’sinin doğru bir şekilde ayarlanmasını gerektirmesi ve belirli türleri otomatik olarak dönüştürmesi nedeniyle meydana gelir ki bunu birazdan tartışacağız.
Çözüm: Görüntü Bağlamayı Basitleştirme
Doğrudan Source Property’sini Kullanma
WPF, görüntü kaynaklarını bağlama sürecini basitleştirmek için yerleşik dönüştürücüler sağlar. Image.Source
‘yi BitmapImage
ile açıkça tanımlamak yerine, Image
‘nin Source
property’sini doğrudan bağlayabilirsiniz. İşte nasıl:
<Image Source="{Binding ImageSource}"/>
Bu durumda, görsel modelinizdeki ImageSource
property’sinin geçerli bir URI’yi temsil eden bir string
olması gerekir. WPF’in ImageSourceConverter
‘ı, sizin için bir string
‘i ImageSource
‘a otomatik olarak dönüştürür.
Özel Bir Değer Dönüştürücü Oluşturma
Daha fazla esneklik gerekiyorsa veya kaynağınız doğrudan bir URI string’i sağlamıyorsa, özel bir değer dönüştürücü oluşturabilirsiniz. İşte basit bir ImageConverter
örneği:
public class ImageConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return new BitmapImage(new Uri(value.ToString()));
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotSupportedException();
}
}
Dönüştürücüyü XAML’de Uygulama
ImageConverter
‘ı oluşturduktan sonra, XAML bağlamanızda doğrudan şu şekilde kullanabilirsiniz:
<Image Source="{Binding ImageSource, Converter={StaticResource ImageConverter}}"/>
Özet
Özetle, WPF’de bir görüntünün UriSource
‘unu bağlarken iki ana seçeneğiniz var:
- Geçerli bir URI’nin
string
temsili ileSource
property’sini doğrudan kullanarak, WPF’in dönüşümü sizin için halletmesine izin verin. - Gerekirse diğer türleri
BitmapImage
‘e dönüştüren bir özel dönüştürücü oluşturun.
Bu kavramları anlayarak ve uygulayarak, WPF’de görüntüleri etkili bir şekilde bağlayabilir ve yaygın sorunlarla veya hatalarla karşılaşmazsınız. İyi kodlamalar!