标签: string-formatting

WPF绑定和动态分配StringFormat属性

我有一个基于几个DataTemplate元素生成的表单.其中一个DataTemplate元素从类中创建一个TextBox,如下所示:

public class MyTextBoxClass
{
   public object Value { get;set;}
   //other properties left out for brevity's sake
   public string FormatString { get;set;}
}
Run Code Online (Sandbox Code Playgroud)

我需要一种方法将FormatString属性中的值"绑定"到绑定的"StringFormat"属性.到目前为止,我有:

<DataTemplate DataType="{x:Type vm:MyTextBoxClass}">
 <TextBox Text="{Binding Path=Value, StringFormat={Binding Path=FormatString}" />
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)

但是,由于StringFormat不是依赖项属性,因此无法绑定它.

我的下一个想法是创建一个值转换器并在ConverterParameter上传递FormatString属性的值,但我遇到了同样的问题 - ConverterParameter不是DependencyProperty.

所以,现在我转向你,所以.如何动态设置绑定的StringFormat; 更具体地说,在TextBox上?

我更愿意让XAML为我工作,这样我就可以避免使用代码隐藏.我正在使用MVVM模式,并希望尽可能不模糊视图模型和视图之间的界限.

谢谢!

wpf binding dynamic string-formatting

10
推荐指数
3
解决办法
1万
查看次数

WPF TextBox绑定与格式

我刚刚将我们的wpf应用程序从3.5sp1升级到4.0.

我们使用下面的代码将文本框绑定到底层视图模型.文本框是可编辑的.

    <TextBox HorizontalContentAlignment="Right"
Text="{Binding Path=Price,   StringFormat={0:#,##0;(#,##0)},  Mode=TwoWay,  ValidatesOnDataErrors=True,  UpdateSourceTrigger=PropertyChanged, ValidatesOnExceptions=True}"/>
Run Code Online (Sandbox Code Playgroud)

在3.5sp1中,格式化最初只会发生.因此,当文本框被加载并绑定到值4000时,格式化将其更改为4,000.如果用户编辑了此值,则不会进行格式化.

在4.0中,格式化随着值的变化而发生(即当用户输入新值时).虽然从理论上说这听起来不错,实际上它是一场灾难.光标到处都是.它无法使用.

现在,我们可以将UpdateSourceTrigger更改为"LostFocus",但这会在某些情况下引入未验证数据的新问题.

有没有办法恢复旧的3.5sp1行为?

更新1

使用Converter仍然会产生相同的行为:

public class DecimalConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value != null)
            return ((decimal)value).ToString("#,##0;(#,##0)");

        return string.Empty;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return value;
    }
}
Run Code Online (Sandbox Code Playgroud)

和修改后的XAML:

<TextBox Text="{Binding Path=Price, Converter={StaticResource DecimalConverter}, Mode=TwoWay, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged, ValidatesOnExceptions=True}"/>
Run Code Online (Sandbox Code Playgroud)

更新2

与此连接文章类似.

wpf binding string-formatting

10
推荐指数
1
解决办法
2万
查看次数

C#:将集合转换为params []

这是我的代码的简化:

void Foo(params object[] args)
{
    Bar(string.Format("Some {0} text {1} here {2}", /* I want to send args */);
}
Run Code Online (Sandbox Code Playgroud)

string.Format要求发送的参数为params.有没有什么方法可以将args集合转换为string.Format方法的参数?

c# string-formatting params

10
推荐指数
1
解决办法
1万
查看次数

python日志字符串格式

我使用python的日志格式化器来格式化日志记录,我的fmt值为

fmt = "[%(filename)s:%(lineno)s] %(message)s"
Run Code Online (Sandbox Code Playgroud)

我想要的是"[file.py:20]"被拉伸到10个字符宽(例如).如果它是一个很容易的值,但有没有办法将整个结构拉伸到指定的长度?我想要的东西:

tmp = "[%(filename)s:%(lineno)s]"
fmt = "%(tmp)10s %(message)s"
Run Code Online (Sandbox Code Playgroud)

我想知道是否可以使用字符串格式化,或者如果我可以欺骗python的格式化程序以某种方式得到我想要的东西..

python formatting logging string-formatting

10
推荐指数
2
解决办法
2万
查看次数

python中的格式字符串,具有可变格式

如何使用变量格式化变量?

cart = {"pinapple": 1, "towel": 4, "lube": 1}
column_width = max(len(item) for item in items)
for item, qty in cart.items():
    print "{:column_width}: {}".format(item, qty)

> ValueError: Invalid conversion specification
Run Code Online (Sandbox Code Playgroud)

要么

(...):
    print "{:"+str(column_width)+"}: {}".format(item, qty)

> ValueError: Single '}' encountered in format string
Run Code Online (Sandbox Code Playgroud)

但是,我能做的是首先构造格式化字符串然后格式化它:

(...):
    formatter = "{:"+str(column_width)+"}: {}"
    print formatter.format(item, qty)

> lube    : 1
> towel   : 4
> pinapple: 1
Run Code Online (Sandbox Code Playgroud)

然而,看起来很笨拙.是不是有更好的方法来处理这种情况?

python string string-formatting

10
推荐指数
1
解决办法
8658
查看次数

嵌套字符串格式

我正在写一些报告,我想知道是否有更简单的方法来获得以下行为.

>>> '{:-^60}'.format('Percentage used: {:.2%}'.format(.4))
'------------------Percentage used: 40.00%-------------------'
Run Code Online (Sandbox Code Playgroud)

正如您所看到的那样,我将文本居中,然后打印一个编码为百分比的数字.但我在另一个内部使用格式化功能.如果可能的话,我想在一个函数中执行相同的操作,如下所示.

'$SOMETHING GOES HERE'.format(header = 'Percentage Used:',percentage = .4)
Run Code Online (Sandbox Code Playgroud)

当然,我正在寻找一种通用解决方案,它可以与所有或大多数格式化选项一起使用,而不仅仅是对齐

谢谢.

python string-formatting python-3.x

10
推荐指数
1
解决办法
2918
查看次数

打印大量格式化数据时如何避免出现管道错误?

我正在尝试打印在我的格式化的元组列表stdout.为此,我使用str.format方法.一切正常,但是当我输出输出以使用head命令a 查看第一行时IOError.

这是我的代码:

# creating the data
data = []$
for i in range(0,  1000):                                            
  pid = 'pid%d' % i
  uid = 'uid%d' % i
  pname = 'pname%d' % i
  data.append( (pid, uid, pname) )

# find max leghed string for each field
pids, uids, pnames = zip(*data)
max_pid = len("%s" % max( pids) )
max_uid = len("%s" % max( uids) )
max_pname = len("%s" % max( pnames) )

# my template …
Run Code Online (Sandbox Code Playgroud)

python format broken-pipe string-formatting ioerror

10
推荐指数
1
解决办法
2万
查看次数

{0}和+之间有什么区别?

使用{0}和之间是否有任何区别,+因为他们在屏幕上打印长度的工作相同:

Console.WriteLine("Length={0}", length);
Console.WriteLine("Length="   + length);
Run Code Online (Sandbox Code Playgroud)

c# string string-formatting

10
推荐指数
2
解决办法
442
查看次数

将十进制值格式化为带有2位小数的货币

我从csv文件获取数据并将其解析为我的应用程序.在我的csv文件中,我有一个列,price其值当然是我项目中项目的价格.

但是,csv文件中的价格不包含尾随0,例如,如果物品的价格是$5.00,则csv文件将其作为$5,如果价格是$9.60,则csv将其作为$9.6.其他价格$9.56虽然很好.

这是我从csv文件中检索价格的方法:

 Price = string.IsNullOrEmpty(columns[3].Trim()) ?
     null : (decimal?)decimal.Parse(columns[3]), 
Run Code Online (Sandbox Code Playgroud)

在我的班级Price设置为public decimal? Price { get; set; }.

如何格式化返回以解决此问题?

Price = String.Format("Price: {0:C}", 
     string.IsNullOrEmpty(columns[3].Trim()) ? 
        null : (decimal?)decimal.Parse(columns[3]));
Run Code Online (Sandbox Code Playgroud)

我尝试了以上但没有奏效.

我如何修复它以使csv中的值$5.9格式化为$5.90.

编辑:

尝试:

Price=decimal.Round(string.IsNullOrEmpty(columns[3].Trim()) ? 
    null : 
    (decimal?)decimal.Parse(columns[3]), 2, MidpointRounding.AwayFromZero);
Run Code Online (Sandbox Code Playgroud)

不确定我是否做对了?

另外,我不确定如何在我的代码中使用以下选项:

decimalVar.ToString ("#.##");
Run Code Online (Sandbox Code Playgroud)

还尝试过:

 Price = string.IsNullOrEmpty(columns[3].Trim()) ? 
      null : (decimal?)decimal.Parse(columns[3], NumberStyles.Currency)
Run Code Online (Sandbox Code Playgroud)

但仍然行不通.

c# string-formatting

10
推荐指数
2
解决办法
4万
查看次数

如何将tuple1 if ... else tuple2传递给str.format?

简而言之,为什么我会收到以下错误?

>>> yes = True
>>> 'no [{0}] yes [{1}]'.format((" ", "x") if yes else ("x", " "))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: tuple index out of range
Run Code Online (Sandbox Code Playgroud)

我使用python 2.6.

python tuples string-formatting

10
推荐指数
3
解决办法
557
查看次数