WPF:IValueConverter与列表
可以将IValueConverter与列表一起使用。它可以在我第一次调用菜单时使用。当我更新列表中的项目时,它不会再次调用IValueConverter? 例如:WPF:IValueConverter与列表,wpf,data-binding,ivalueconverter,Wpf,Data Binding,Ivalueconverter,可以将IValueConverter与列表一起使用。它可以在我第一次调用菜单时使用。当我更新列表中的项目时,它不会再次调用IValueConverter? 例如: 及 public class ListDocumentToStringConverter: IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
及
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();
}
}
公共类ListDocumentToStringConverter:IValueConverter
{
公共对象转换(对象值、类型targetType、对象参数、CultureInfo区域性)
{
var selectedDocuments=(ObservableCollection)值;
var结果=”;
foreach(选定文档中的var文档)
{
结果+=文件名+“\t”;
}
返回结果;
}
公共对象转换回(对象值、类型targetType、对象参数、CultureInfo区域性)
{
抛出新的NotImplementedException();
}
}
要在fmunkert的评论中添加正确的内容,如果您打算在一个菜单项中托管所有这些项目,您可以编写如下内容:
<MenuItem>
<MenuItem.Header>
<ItemsControl ItemsSource="{Binding Path=DataContext.Documents, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListView}}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</MenuItem.Header>
<MenuItem.Icon>
<Image Source="Images/upload.png" Style="{StaticResource ImageContextMenu}"/>
</MenuItem.Icon>
</MenuItem>
这样,您根本不必使用转换器。如果要更改这些项彼此之间的布局方式,例如在示例中使用中间的选项卡,则需要对ItemsControl的ItemsPanel进行模板化。默认情况下,它是垂直堆叠面板。您可以将其更改为水平堆叠面板,如下所示:
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
然后,您可以为每个文本块项添加间距或边距,以实现所需的视觉效果。仅当
Documents
属性获得新值时,才会调用转换器;如果文档
属性所引用的集合保持不变,则不会调用转换器,即使文档
项已添加到该集合中。是否确实要将所有文档名称写入一个菜单项
?还是要为每个文档创建一个MenuItem
?如果是后者,请将您的收藏分配到菜单.ItemsSource
。我使用Document.SelectedCount,如果我单击文档中的另一项,它将再次调用converter
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>