C# 列表框迭代WPF
我将一个列表框绑定到一个可观察的集合,XAML代码片段显示了每个项目将包含的内容(textblocks和Slidercontrol)。Slidercontrol初始设置为不可见C# 列表框迭代WPF,c#,.net,wpf,windows-phone-7,C#,.net,Wpf,Windows Phone 7,我将一个列表框绑定到一个可观察的集合,XAML代码片段显示了每个项目将包含的内容(textblocks和Slidercontrol)。Slidercontrol初始设置为不可见 ListBox.ItemTemplate> <DataTemplate> <StackPanel Orientation="Vertical" Width="500"> <st
ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Vertical" Width="500">
<stackPanel Orientation="Horizontal">
<TextBlock Margin="0,0,0,0" Width="100"........
<TextBlock Margin="200,10,0,0" Width="100"........
</StackPanel>
<Slider Margin="0,0,0,0" Height="100".................
<StackPanel Orientation="Horizontal">
<TextBlock Width="100" TextWrapping="Wrap"..............
<TextBlock Width="100" TextWrapping="Wrap"...............
</StackPanel>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
ListBox.ItemTemplate>
尝试ValueConverter-您需要以下内容:
<Slider Margin="0,0,0,0" Height="100" IsEnabled="{Binding Path=Time, Converter={StaticResource IsTimeNearSystemTimeConverter}}" />
<Slider Margin="0,0,0,0" Height="100">
<Slider.IsEnabled>
<MultiBinding Converter="{StaticResource betweenTimeConverter}">
<Binding Path="EarlyTime" />
<Binding Path="LateTime" />
</MultiBinding>
</Slider.IsEnabled>
</Slider>
编辑
听起来您需要使用多值转换器进行多绑定
public class BetweenTimesMultiValueConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
var time1 = (DateTime)values[0];
var time2 = (DateTime)values[1];
var current = DateTime.Now;
return time1 > current && time2 < current;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
中间的公共类多值转换器:IMultiValueConverter
{
公共对象转换(对象[]值,类型targetType,对象参数,CultureInfo区域性)
{
var time1=(DateTime)值[0];
var time2=(DateTime)值[1];
var current=DateTime.Now;
返回时间1>当前时间和时间2<当前时间;
}
公共对象[]转换回(对象值,类型[]目标类型,对象参数,CultureInfo区域性)
{
抛出新的NotImplementedException();
}
}
将上述类作为静态资源添加到xaml中,然后按如下方式使用:
<Slider Margin="0,0,0,0" Height="100" IsEnabled="{Binding Path=Time, Converter={StaticResource IsTimeNearSystemTimeConverter}}" />
<Slider Margin="0,0,0,0" Height="100">
<Slider.IsEnabled>
<MultiBinding Converter="{StaticResource betweenTimeConverter}">
<Binding Path="EarlyTime" />
<Binding Path="LateTime" />
</MultiBinding>
</Slider.IsEnabled>
</Slider>
再次更新
首先,只要您只使用滑块
查看时间进度,那么正确的控件就是进度条
控件(使用滑块
控件可以让用户更改值,例如更改媒体播放器的音量)。此外,您可以更轻松地实现这一点,而无需使用TreeVisualHelper
。假设您正在绑定到以下ObservableCollection
对象:
ObservableCOllection<MyObject> Collection;
然后,在项目模板中,将您的ProgressBar.Value
属性绑定到ProgressValue
属性,它将类似于以下内容:
<BrogressBar Value="{Binding ProgressValue}"/>
这样,每个项目都有自己的计时器。一个更好的选择是每5分钟只使用一个计时器遍历一次集合,并执行必要的操作。但我想这更像是静态的,我的ObservaleCollection列表对象中有两个时间属性如果时间介于这两个时间之间,我会每5分钟对转换器进行一次备份和更新,如果时间不再介于开始时间和结束时间之间,我会禁用它,如果您能告诉我如何为此场景编写动态IvalueConverter类,我将不胜感激,感谢您的帮助。感谢Dean感谢您的回复,基本上滑块代表时间的进度,我需要找到一种方法来更新滑块值,感谢您的帮助我在MYObject StartTime和EndTime中有两个属性,我想在开始时间后启用滑块,并每5分钟更新一次,直到达到结束时间,然后禁用滑块控件。感谢您的帮助。Mohammed Good stuff对其他控件的绑定有其他想法,但我如何更新滑块的值,基本上滑块代表时间的进度,也许我应该早点说。@AshwinNagarajan,你用滑块只是为了及时显示进度吗?或者用户可以拖动并更改其值?@AshwinNagarajan,将滑块控件更改为进度条。查看我的新更新,并反馈我是否可以执行此操作IsEnabled=“{Binding IsEnabled_Progress}”Visibility=“Collapsed”Value=“{Binding ProgressValue}”。。。。