0
可以使用带List的IValueConverter。它可以在第一次使用菜单时使用。当我更新列表中的项目时,它不会再次调用IValueConverter? 例子:WPF:带列表的IValueConverter
<MenuItem Header="{Binding Path=DataContext.Documents, RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type ListView}}, Converter={StaticResource DocumentsToString}, Mode=OneWay}">
<MenuItem.Icon>
<Image Source="Images/upload.png" Style="{StaticResource ImageContextMenu}"/>
</MenuItem.Icon>
</MenuItem>
而且ValueConverters.cs
public class ListDocumentToStringConverter: IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var selectedDocuments = (ObservableCollection<Document>) value;
var result = "";
foreach (var document in selectedDocuments)
{
result += document.Name + "\t";
}
return result;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
转换器仅在'Documents'属性获得新值时才被调用;如果'Documents'属性引用的集合保持不变,即使将“Document”项添加到该集合,转换器也不会被调用。你真的想把所有的文档名称写入一个'MenuItem'吗?或者你想为每个文档创建一个'MenuItem'?如果后者是这种情况,请将您的集合分配给'Menu.ItemsSource'。 – 2012-06-02 05:40:18
我使用Document.SelectedCount,如果我点击Document中的另一个项目,它再次调用转换器 –