1

我有一个StatusBarItem我想在任何给定时刻显示以下消息“X/Y”,其中 X 是当前选定元素的行数,Y 是行数。

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

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

哦,当我们这样做的时候,我将如何增加选定的索引?基本上,我希望它显示 0 到 rowCount,而不是 -1 到 rowCount-1。我见过人们使用格式化程序将额外的文本添加到他们的数据绑定中,但我不确定如何像这样操作数据。

4

1 回答 1

0

你有两个选择:

将a设置Content为与一起使用,例如:StatusbarItemTextBlockStringFormatMultiBinding

<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

<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>

和 InfoConverter.cs:

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返回一个字符串时,为什么我们不能StringFormatMultiBinding没有TextBlockwhich 的情况下使用它的Text字段中的字符串。

至于您关于如何增加SelectedIndex值的第二个问题,您可以使用 Converter 轻松做到这一点,

只需将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();
}
于 2013-05-07T20:20:58.670 回答