[英]Converter in WPF ListView using cached value as parameter
我有一个管理不同类型文档的应用程序。 在文档管理器中,我在ListView中显示文档。 我创建了一些转换器,以在不弄乱文档类本身的情况下显示文档的特殊aspacts。 列表视图中的一列应显示一个代表文档类型和文档编号的图标。 列应如下所示
<icon> D 1 <icon> D 11 ...
文件编号应在左侧填充以适合最大编号。
目前,我有一个转换器,可以创建所需的字词
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
D{
System.Windows.Controls.ListView view = (System.Windows.Controls.ListView)parameter;
int count = (view.Items.Count.ToString().Count());
string id = "D" + value.ToString().PadLeft(count);
return id;
}
转换器用于CellTemplate,其中转换器参数是listview本身
<TextBlock Text="{Binding Number, Converter={StaticResource docIDConverter}, ConverterParameter={x:Reference Documents}}" />
我知道项目中的文档数量,可以将其作为窗口类的属性来提供
/// <summary>
/// The amount of documents contained in a project
/// </summary>
int documentCount = 0;
public int DocumentCount {
get {
if(this.documentCount == 0)
documentCount = Project.Documents.Count;
return documentCount;
}
}
这行得通,但我认为这是不好的风格,在大名单上可能会很慢。
如何使用属性DocumentCount作为转换器的参数。 或者如何在多值转换器中将属性DocumentCount用作绑定对象感谢Clemens Hoffmann
ConverterParameters不是依赖项属性。 因此,您无法绑定到它们。 但是您可以使用多重绑定获得相同的效果:
<Style TargetType="FrameworkElement">
<Setter Property="Text">
<Setter.Value>
<MultiBinding Converter="{StaticResource docIDConverter}">
<Binding Path="DocumentCount" RelativeSource="RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}"/>
</MultiBinding>
</Setter.Value>
</Setter>
</Style>
现在,多值转换器将源值数组作为输入:
public class AccessLevelToVisibilityConverter : IMultiValueConverter {
public object Convert(
object[] values, Type targetType, object parameter, CultureInfo culture)
{
int count = values.All(v => (v is int);
string id = "D" + values.All(v => (v is TypeYouAreExpectingHere).ToString().PadLeft(count);
return id;
}
public object[] ConvertBack(
object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotSupportedException();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.