组合框绑定和字符串格式化

4

我有一个WPF组合框

<ComboBox SelectedValue="{Binding ElementName=Ctrl, Path=Day, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, StringFormat='00'}"
ItemsSource="{Binding ElementName=Ctrl, Path=AvailableDays, Mode=OneWay, StringFormat='00'}"
IsEditable="True" Grid.Column="0" />

这些属性已经和数据绑定了

public int? Day {
    get { return _day; }
    set {
        if (_day != value) {
            _day = value;
            OnPropertyChanged();
        }
    }
}

public IEnumerable<int> AvailableDays {
    get { return _availableDays ?? (_availableDays = Enumerable.Range(1, 31)); }
}

绑定功能正常,但我的问题是数值的格式。我希望当天数小于10时能够添加前导零。但我的“StringFormat ='00'”被完全忽略了,这很奇怪,因为相同的格式在没有问题的文本块中可以正常工作。


4
你尝试过在 ComboBox 上设置 ItemStringFormat="00" 吗? - SuperOli
1
我在某个地方读到,只有当你的ComboBox上的IsEditable="False"时才能正常工作。所以在你的情况下,它不应该起作用。但是无论如何还是试一试吧。 - SuperOli
1
请看这个:https://dev59.com/YGkw5IYBdhLWcg3w9vN- - SuperOli
@SuperOli:就像你所说的那样。ItemStringFormat适用于所有DropDown-Items。如果IsEditable="False",它仅适用于所选项目。谢谢! - alexloehr
1个回答

4
Binding.StringFormat 只对目标属性类型为 string 时起作用。这就是为什么它可以与 string TextBlock.Text 一起使用,但不能与 object ComboBox.SelectedValue 一起使用的原因。通常,如果您想要格式化绑定的结果,可以创建一个自定义的 StringFormatConverter : IValueConverter 类,并在 Binding.Converter 中使用它。

在您的情况下,应改用 ComboBox.ItemStringFormat


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接