xceedsoftware / wpftoolkit

All the controls missing in WPF. Over 1 million downloads.
Other
3.91k stars 878 forks source link

TimeSpanUpDown ShowDays and ShowSeconds bug inside ListView.ItemTemplate #1768

Closed tqk2811 closed 1 month ago

tqk2811 commented 10 months ago

Version: Extended.Wpf.Toolkit 4.6.0 ( latest )

<!--top TimeSpanUpDown-->
 <Xceed:TimeSpanUpDown Value="{Binding Source={StaticResource TimeRange},Path=TimeRange}" ShowDays="False" ShowSeconds="False"/>

<!--List View-->
<ListView MinHeight="60" ScrollViewer.HorizontalScrollBarVisibility="Disabled"
          ItemsSource="{Binding Source={StaticResource TimeRange},Path=TimeList}" 
          d:ItemsSource="{d:SampleData ItemCount=10}">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <WrapPanel HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="5" Orientation="Horizontal"/>
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ListView.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <CheckBox IsChecked="{Binding IsChecked}" VerticalAlignment="Center"/>
                <Xceed:TimeSpanUpDown Value="{Binding Time}" Maximum="23:59" Minimum="00:00"/>
            </StackPanel>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

image

When i change TimeSpanUpDown inside listview such as

<Xceed:TimeSpanUpDown Value="{Binding Time}" ShowDays="False"/>
<Xceed:TimeSpanUpDown Value="{Binding Time}" ShowSeconds="False"/>
<Xceed:TimeSpanUpDown Value="{Binding Time}" ShowDays="False" ShowHours="False"/>

No error msg in output visual studio

image

XceedBoucherS commented 10 months ago

Hello,

I've created a basic sample based on yours :

image

public MainWindow() { InitializeComponent();

this.DataContext = new List() { new TimeSpan(9, 11, 32), new TimeSpan(21, 5, 14), }; }

It is working as expected with the latest v4.6 version of the Toolkit on NuGet: image

I'm I missing something or it's in your sample ? Thank you

tqk2811 commented 10 months ago

image

<Window x:Class="WpfTestXceedTimeSpanUpDown.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfTestXceedTimeSpanUpDown"
        xmlns:Xceed="http://schemas.xceed.com/wpf/xaml/toolkit"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Window.DataContext>
        <local:MainWVM/>
    </Window.DataContext>
    <Grid>
        <!--<Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition/>
        </Grid.RowDefinitions>-->
        <StackPanel Orientation="Vertical" >
            <!--(1)-->
            <Xceed:TimeSpanUpDown Grid.Row="0" Value="{Binding Path=TimeSpan}" ShowSeconds="False"/>

            <ListView Grid.Row="1" ItemsSource="{Binding TimeList}" >
                <ListView.View>
                    <GridView>
                        <GridViewColumn Width="300">
                            <GridViewColumn.CellTemplate>
                                <DataTemplate>
                                    <!--(2)-->
                                    <Xceed:TimeSpanUpDown Value="{Binding Time}" ShowDays="False"/>
                                </DataTemplate>
                            </GridViewColumn.CellTemplate>
                        </GridViewColumn>
                    </GridView>
                </ListView.View>
                <!--<ListView.ItemTemplate>
                    <DataTemplate>
                        --><!--(3)--><!--
                        <Xceed:TimeSpanUpDown Value="{Binding Time}" ShowSeconds="False"/>
                    </DataTemplate>
                </ListView.ItemTemplate>-->
            </ListView>
        </StackPanel>
    </Grid>
</Window>
internal class MainWVM
{
    public TimeSpan TimeSpan { get; set; } = TimeSpan.FromHours(2);
    public ObservableCollection<TimeVM> TimeList { get; } = new ObservableCollection<TimeVM>()
    {
        new TimeVM(),
        new TimeVM(),
        new TimeVM(),
        new TimeVM(),
        new TimeVM(),
        new TimeVM(),
        new TimeVM(),
    };
}
public class TimeVM
{
    public TimeSpan Time { get; set; } = TimeSpan.FromHours(1);
}

https://github.com/tqk2811/WpfTestXceedTimeSpanUpDown

(1) work
(2) (3) failed (may be problem because inside DataTemplate)


Update:

XceedBoucherS commented 10 months ago

Hi,

Thank you for the feedback. I was able to reproduce the issue. It will be fixed in the next release.

If you want a quick fix, you can go in file Xceed.Wpf.Toolkit/TimeSpanUpDown/Implementation/TimeSpanUpDown.cs and replace all the occurences of this.Value = something to this.SetCurrentValue( TimeSpanUpDown.ValueProperty, something);

Thank you

tqk2811 commented 1 month ago

fixed in 4.6.1