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中的另一個項目,它再次調用轉換器 –