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