2010-05-19 18 views
6

DataGrid'de sütunun özelleştirilmiş biçimlendirmesini ayarlamanın en etkili yolu ne olurdu? Gelişmiş biçimlendirmemde bu ViewModel'in diğer özelliklerine de bağlı olarak, aşağıdaki StringFormat'ı kullanamıyorum. (Örneğin Fiyat biçimlendirme farklı pazarlarda dayalı bazı karmaşık biçimlendirme mantığı vardır.)WPF DataGrid'de özelleştirilmiş StringFormat

Binding ="{Binding Price, StringFormat='{}{0:#,##0.0##}'}" 

cevap

6

Bir dönüştürücü ile MultiBinding kullanabilirsiniz.

<MultiBinding Converter="{StaticResource formatter}"> 
    <Binding Path="Price" /> 
    <Binding Path="PriceFormat" /> 
</MultiBinding> 

bu konuda güzel bir parçası:

public class FormatConverter : IMultiValueConverter 
{ 
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) 
    { 
     // some error checking for values.Length etc 
     return String.Format(values[1].ToString(), values[0]); 
    } 

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

Şimdi ViewModel mülkiyet ve aynı şey biçimini hem de bağlama: Birinci, ikinci belirtilen biçimi kullanarak ilk değeri biçimlendirir bir IMultiValueConverter tanımlamak Fiyatın nasıl biçimlendirileceğine dair mantık, ViewModel'de yaşayabilir ve test edilebilir. Aksi takdirde bu mantığı dönüştürücüye taşıyabilir ve ihtiyaç duyduğu başka herhangi bir özellikten geçirebilirsiniz.

+0

Bu, daha önce hiç kullanılmamış, çok kullanılan ve daha önce hiç kullanılmamış olan, çok karmaşık bir formatlama için dönüştürücü parametresinden çok daha iyi bir çözüm gibi görünüyor. –

+0

Ve elbette, ViewModel'de bir "FormattedPrice" özelliğini uygulamaktan ve buna bağlanmaktan dolayı @Boris'i durduran hiçbir şey yok. Esnek olmasa bile bu daha kolay olurdu. –

+0

teşekkürler! İşe yarıyor! "FormattedPrice" e sahip olmak daha kolay ancak daha az zarif olurdu. Datagrid'imde en az 10 farklı fiyatım var. Bu aşamadaki tek endişem IMultiValueConverter'in performans sonuçlarıdır. –

İlgili konular