我有StatusBarItem
我希望在任何给定时刻显示以下消息“X / Y”,其中X是当前所选元素的行号,Y是行数。 / p>
现在,如果我在xaml中使用Content="{Binding ElementName=lvTabela, Path=SelectedIndex}"
代码,我可以获得要显示的第一个属性,但我不确定如何同时获取这两个属性。
我想我总是可以使用两个StatusBarItem
元素,但我也想学习如何做到这一点。
哦,虽然我们正在努力,但我将如何增加选定的指数?基本上,而不是-1到rowCount-1我希望它显示0到rowCount。我见过人们使用格式化程序为其数据绑定添加额外的文本,但我不确定如何操作这样的数据。
答案 0 :(得分:0)
你有两个选择:
将Content
StatusbarItem
的{{1}}设置为TextBlock
使用StringFormat
,例如:
MultiBinding
或使用<StatusBarItem>
<StatusBarItem.Content>
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="{}{0}/{1}">
<MultiBinding.Bindings>
<Binding ElementName="listView"
Path="SelectedIndex" />
<Binding ElementName="listView"
Path="Items.Count" />
</MultiBinding.Bindings>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</StatusBarItem.Content>
</StatusBarItem>
上的转换器,而不必使用MultiBinding
TextBlock
和InfoConverter.cs:
<Window.Resources>
<local:InfoConverter x:Key="InfoConverter" />
</Window.Resources>
...
<StatusBarItem>
<StatusBarItem.Content>
<MultiBinding Converter="{StaticResource InfoConverter}">
<MultiBinding.Bindings>
<Binding ElementName="listView"
Path="SelectedIndex" />
<Binding ElementName="listView"
Path="Items.Count" />
</MultiBinding.Bindings>
</MultiBinding>
</StatusBarItem.Content>
</StatusBarItem>
class InfoConverter : IMultiValueConverter {
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) {
return values[0].ToString() + "/" + values[1].ToString();
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) {
throw new NotImplementedException();
}
}
需要一个对象,当StatusBarItem
返回一个字符串时,为什么我们不能将StringFormat
与StringFormat
一起使用MultiBinding
而不能使用TextBlock
字符串在Text
字段中。
关于如何增加SelectedIndex
值的第二个问题,您可以轻松地使用转换器
只需将Convert(...)
中的InfoConverter.cs
功能切换为
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) {
return (System.Convert.ToInt32(values[0]) + 1).ToString() + "/" + values[1].ToString();
}