C# 使用缓存值作为参数的WPF ListView中的转换器

C# 使用缓存值作为参数的WPF ListView中的转换器,c#,wpf,listview,C#,Wpf,Listview,我有一个管理不同类型文档的应用程序。 在文档管理器中,我在列表视图中显示文档。 我已经创建了一些转换器来显示文档的特殊行为,而不会弄乱文档类本身。 列表视图中的一列应显示代表文件类型和文件编号的图标。这些柱子看起来应该像 转换器在CellTemplate中使用,其中转换器参数为listview本身 <TextBlock Text="{Binding Number, Converter={StaticResource docIDConverter}, ConverterParameter={


我有一个管理不同类型文档的应用程序。 在文档管理器中,我在列表视图中显示文档。 我已经创建了一些转换器来显示文档的特殊行为,而不会弄乱文档类本身。 列表视图中的一列应显示代表文件类型和文件编号的图标。这些柱子看起来应该像

转换器在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;
        }
    }
//
///项目中包含的文档数量
/// 
int documentCount=0;
公共int文档计数{
获取{
如果(this.documentCount==0)
documentCount=Project.Documents.Count;
返回文件计数;
}
}
<>这是有效的,但我认为这是坏的风格,在大的列表上可能会很慢。< /P> 如何使用property DocumentCount作为转换器的参数。 或 如何在多值转换器中将property DocumentCount用作绑定 谢谢
克莱门斯·霍夫曼

转换器参数不是依赖属性。因此,您无法绑定到它们。但您可以使用多重绑定来获得相同的效果:

<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>
    /// <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;
        }
    }
<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();
        }
    }