WPF内容绑定 - 想要在StatusBarItem中显示ListView的两个属性

时间:2013-05-07 19:41:32

标签: wpf listview binding

我有StatusBarItem我希望在任何给定时刻显示以下消息“X / Y”,其中X是当前所选元素的行号,Y是行数。 / p>

现在,如果我在xaml中使用Content="{Binding ElementName=lvTabela, Path=SelectedIndex}"代码,我可以获得要显示的第一个属性,但我不确定如何同时获取这两个属性。

我想我总是可以使用两个StatusBarItem元素,但我也想学习如何做到这一点。

哦,虽然我们正在努力,但我将如何增加选定的指数?基本上,而不是-1到rowCount-1我希望它显示0到rowCount。我见过人们使用格式化程序为其数据绑定添加额外的文本,但我不确定如何操作这样的数据。

1 个答案:

答案 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返回一个字符串时,为什么我们不能将StringFormatStringFormat一起使用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();
}