wpf - 将 DataContext 索引绑定到滑块控件值
问题描述
是否可以使用 WPF Slider 控件 (Slider.Value) 的当前值作为另一个控件上的索引绑定的输入?
用例:项目集合设置为控件的 DataContext,滑块用于选择显示集合中的哪个项目。
<Slider x:Name="selector" Minimum="1" Maximum="{Binding Count}"/>
<!-- How to grab the value of selector and use as indexer?? -->
<StackPanel DataContext="{Binding [??????]}">
<TextBlock Text="{Binding name}"/>
<TextBlock Text="{Binding job}" />
</StackPanel>
解决方案
是否可以使用 WPF Slider 控件 (
Slider.Value
) 的当前值作为另一个控件上的索引绑定的输入?
不,不是直接的。??????
in{Binding [??????]}
必须是编译时常量。
您可以同时绑定到DataContext
和 的Value
属性,Slider
并使用转换器来执行查找:
public class MultiConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
var yourDataContext = values[0] as IDictionary<double, object>; //cast to whatever the type of your DataContext is
double value = (double)values[1];
return yourDataContext[value];
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) =>
throw new NotSupportedException();
}
XAML:
<StackPanel>
<StackPanel.DataContext>
<MultiBinding>
<MultiBinding.Converter>
<local:MultiConverter />
</MultiBinding.Converter>
<Binding Path="." />
<Binding Path="Value" ElementName="selector" />
</MultiBinding>
</StackPanel.DataContext>
<TextBlock Text="{Binding name}"/>
<TextBlock Text="{Binding job}" />
</StackPanel>
推荐阅读
- autodesk-forge - 使用 BIM 360 Forge API 检索项目并使用按名称过滤
- c# - 将 C# 或 vb.net 中的 PDF 文档发送到 whatsapp?
- google-chrome - 在 Google Chrome 和 Microsoft Edge 上下载动态生成的 PDF 的问题
- javascript - 使用 CSS 在 Mobile Chrome Android 中设置打印纸张大小(即更改纸张大小)
- c# - 在 NpgSQL 中打开多个 conn 是否可行?
- javascript - 输入范围实例变量返回初始值而不是修改
- javascript - 根据元素控制数组
- android - 在 Android Studio 中向列表视图添加自定义行
- php - file_put_contents 工作完美,直到从小部件移动到插件
- json - 将一些对象列转换为json字符串