2013-06-20 57 views
2

是否有可能使用的StringFormat格式化字符串...WPF的StringFormat格式化字符串值

例如..我的模型:

的代码
public class MyModel 
{ 
     public string Code { get; set; } 
} 

可能的值是: '00000101001',“00000201001 ”等等......

当绑定,我倒是想表明: 为 '00000101001' - > '000001-01'(忽略最后3个字符) 为 '00000201001' - > '000002-01' (忽略最后3个字符)

如果它可能使用stringformat来实现这一点,将是很好,而不得不由我自己来实现。

回答

2

您提出的问题有关BINDING WPF中的字符串(不改变字符串的内部内容),并且在解决此问题的首选策略之间使用转换器,这里是一个示例,对(只显示前10个字符)...

public class CodeConverter : MarkupExtension, IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, 
        System.Globalization.CultureInfo culture) 
    { 
     try 
     { 
      string result = value.ToString(); 
      if (result.Length > 10) 
      { 
       // code in your exact requirements here... 
       return result.Substring(0, 10); 
      } 
      return result; 
     } 
     catch{} 
     return value; 
    } 
    public object ConvertBack(object value, Type targetType, object parameter,  
        System.Globalization.CultureInfo culture) 
    { 
     return null; 
    } 
    public override object ProvideValue(IServiceProvider serviceProvider) 
    { 
     return this; 
    } 
} 

在XAML中,只需在你的绑定指定这个类...

{Binding Code, Converter={StaticResource CodeConverter} 

,你是好去!

0

只需使用转换功能。 E.g:

public static string Convert(string raw) 
{ 
    return raw.Substring(0,6)+"-"+raw.Substring(6,2); 
} 

Console.WriteLine (Convert("00000201001")); 

//output= 000002-01 
+0

这个想法很好,但在这种情况下,我必须在我的模型中创建一个新属性,使用转换器,我认为在这种情况下效果更好,因为它只会在视图中显示时转换。韩国社交协会。 – will

0

可以做这样的事情:

return (Int64.Parse("00000101001")/1000).ToString("000000-00"); 

问候。