2013-06-20 5 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

Ваш вопрос задает вопрос о том, как использовать 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

Просто используйте функцию преобразования. Например:

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"); 

С уважением.

Смежные вопросы