Back to list
christian289

displaying-slider-index

by christian289

ClaudeCode와 함께하는 .NET 개발 튜토리얼

1🍴 0📅 Jan 25, 2026

SKILL.md


name: displaying-slider-index description: "Displays 0-based collection indices as 1-based numbers in WPF Slider controls. Use when showing user-friendly slice/page numbers while maintaining 0-based internal indexing."

WPF Slider 0-based Index Display Pattern

Problem Scenario

When displaying collection indices with a slider, internally using 0-based index but displaying as 1-based to users is a common requirement.

Symptoms

  • 120 images exist but displayed as "0 / 120" ~ "119 / 120"
  • Users expect "1 / 120" ~ "120 / 120"
  • Dragging slider to the end doesn't reach the last item

Cause

  • If slider's Maximum is set to TotalCount, it exceeds the valid range
  • Displaying 0-based index directly confuses users

Solution

Add Display Properties to ViewModel

public partial class ViewerViewModel : ObservableObject
{
    // Internal index (0-based)
    [NotifyPropertyChangedFor(nameof(SliceDisplayNumber))]
    [ObservableProperty] private int _currentSliceIndex;

    // Total count
    [NotifyPropertyChangedFor(nameof(MaxSliceIndex))]
    [ObservableProperty] private int _totalSliceCount;

    /// <summary>
    /// Slider Maximum value (0-based index maximum)
    /// </summary>
    public int MaxSliceIndex => Math.Max(0, TotalSliceCount - 1);

    /// <summary>
    /// User display number (1-based)
    /// </summary>
    public int SliceDisplayNumber => CurrentSliceIndex + 1;
}

XAML Binding

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="Auto" />
    </Grid.ColumnDefinitions>

    <!-- Current number (1-based display) -->
    <TextBlock Grid.Column="0"
               Text="{Binding SliceDisplayNumber}" />

    <!-- Slider (0-based index, Maximum is Count-1) -->
    <Slider Grid.Column="1"
            Minimum="0"
            Maximum="{Binding MaxSliceIndex}"
            Value="{Binding CurrentSliceIndex}" />

    <!-- Total count -->
    <TextBlock Grid.Column="2"
               Text="{Binding TotalSliceCount}" />
</Grid>

Key Points

PropertyValue RangePurpose
CurrentSliceIndex0 ~ (Count-1)Internal logic, Slider Value
MaxSliceIndexCount-1Slider Maximum
SliceDisplayNumber1 ~ CountUser display
TotalSliceCountCountTotal count display

Using NotifyPropertyChangedFor

The [NotifyPropertyChangedFor] attribute automatically raises PropertyChanged for computed properties when the source property changes.

// When CurrentSliceIndex changes, SliceDisplayNumber also raises PropertyChanged
[NotifyPropertyChangedFor(nameof(SliceDisplayNumber))]
[ObservableProperty] private int _currentSliceIndex;

// When TotalSliceCount changes, MaxSliceIndex also raises PropertyChanged
[NotifyPropertyChangedFor(nameof(MaxSliceIndex))]
[ObservableProperty] private int _totalSliceCount;

Application Examples

  • Image viewer slice navigation (CT/MRI)
  • Pagination (document viewer)
  • Media player track list
  • Gallery image index

Score

Total Score

65/100

Based on repository quality metrics

SKILL.md

SKILL.mdファイルが含まれている

+20
LICENSE

ライセンスが設定されている

+10
説明文

100文字以上の説明がある

0/10
人気

GitHub Stars 100以上

0/15
最近の活動

1ヶ月以内に更新

+10
フォーク

10回以上フォークされている

0/5
Issue管理

オープンIssueが50未満

+5
言語

プログラミング言語が設定されている

+5
タグ

1つ以上のタグが設定されている

+5

Reviews

💬

Reviews coming soon