在Windows Phone中绑定StringFormat

时间:2014-11-07 16:05:37

标签: c# windows-phone-8 windows-phone

我为windows phone 8开发了silverlight应用程序。 我在LongListSelector中绑定整数值,例如123.我想让它看起来像 000123

<phone:LongListSelector ItemsSource="{Binding AllValues}">
  <phone:LongListSelector.ItemTemplate>   
    <DataTemplate>
     <StackPanel>
       <TextBlock x:Name="ValueBlock" 
                  Text="{Binding ValueValue}"
                  HorizontalAlignment="Left" 
                  VerticalAlignment="Center" 
                  Style="{StaticResource PhoneTextLargeStyle}"/>
...

我知道StringFormat可以做到这一点,但问题是前导零的数量总是不同的,我想从ViewModel绑定它。

... 
Text="{Binding ValueValue}, StringFormat=\{0:D6\}"
...

如何在StringFormat中 D 之后绑定一个数字?

2 个答案:

答案 0 :(得分:1)

你做不到,但无论如何你采取了错误的做法。如果希望viewmodel决定值的显示方式,则让viewmodel处理格式化值的整个过程。例如:

public string Value
{
    get
    {
        return string.Format("{0:D" + this.NumberOfZero + "}", this.value);
    }
}

然后将您的视图直接绑定到格式化的属性。

如果您的属性是数值,您也可以直接写:

public string Value
{
    get
    {
        return this.value.ToString("D" + this.NumberOfZero);
    }
}

答案 1 :(得分:1)

您无法绑定绑定表达式的StringFormat部分。你可以做的是将另一个属性添加到视图模型中,如“ValueDisplay”。

public string ValueDisplay
{
    get { return string.Format("{0:" + ValueFormat + "}", ValueValue); }
}

public string ValueFormat
{
    get { return _valueFormat; }
    set
    {
        _valueFormat = value;
        RaisePropertyChanged("ValueDisplay");
    }
}
private string _valueFormat;