मैं एक स्तंभ इस तरह परिभाषित किया गया है:WPF प्रारूप टेक्स्ट प्रदर्शित किया?
<DataGridTextColumn Binding="{Binding Path=FileSizeBytes, Mode=OneWay}" Header="Size" IsReadOnly="True" />
लेकिन बजाय एक बड़ी संख्या के रूप में फ़ाइल आकार प्रदर्शित करने में, मैं इकाइयों प्रदर्शित करना चाहते हैं, लेकिन अभी भी वास्तविक FileSizeBytes
द्वारा तरह पास है। क्या ऐसा कोई तरीका है जिसे मैं इसे किसी फ़ंक्शन या इसे प्रदर्शित करने से पहले चला सकता हूं?
@Igor:
महान काम करता है।
http://img200.imageshack.us/img200/4717/imageget.jpg
[ValueConversion(typeof(long), typeof(string))]
class FileSizeConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
string[] units = { "B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB" };
double size = (long)value;
int unit = 0;
while (size >= 1024)
{
size /= 1024;
++unit;
}
return String.Format("{0:0.#} {1}", size, units[unit]);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
इस मामले में कि आप स्रोत वर्ग में कोई अन्य संपत्ति नहीं जोड़ सकते हैं (इसके लिए कई कारण हो सकते हैं), दूसरा समाधान एक IValueConverter बनाना होगा और कनवर्टर प्रॉपर्टी का उपयोग करके बाध्यकारी को देना होगा। फिर हर बार बाध्यकारी अद्यतन यह कनवर्टर कोड के माध्यम से पहले चला जाएगा। – Charlie
हाँ, अच्छा बिंदु। इसके लिए वैकल्पिक स्रोत स्रोत को एक व्यूमोडेल में लपेटना होगा, जो कुछ मामलों में एक ओवरकिल हो सकता है। –
कारण मैं अधिक संपत्तियों के साथ नहीं जाना चाहता क्योंकि मुझे उनमें से प्रत्येक के लिए एक संपत्ति चेंज किया गया कार्यक्रम आग लगाना है ... मैं अनिवार्य रूप से वही चीज़ों के लिए दर्जनों ट्रिगर्स के साथ हवा कर सकता हूं! इसके अलावा, आप डेटा के साथ प्रस्तुति दे रहे हैं। हालांकि मुझे दूसरी सोल पसंद है। – mpen