绑定到WPF GridView中的SelectedItems总和

djs*_*rtz 2 wpf binding gridview selecteditem

我有一个GridView,其中包含文件列表,创建日期和文件大小.在网格下方,我有一个文本块,上面写着"X Files Selected.Y MB".我可以很好地绑定到SelectedItems.Count,但是我可以轻松地绑定到所选文件大小的总和吗?

下面的问号应该是SelectedItems fileSize列值的总和.有任何想法吗?

<TextBlock HorizontalAlignment="Right">
        <TextBlock.Text>
            <MultiBinding StringFormat=" {0} Files Selected. {1} MB">
                <Binding ElementName="FilesList" Path="SelectedItems.Count"></Binding>
                <Binding ElementName="FilesList" Path="SelectedItems.?????"></Binding>
            </MultiBinding>
        </TextBlock.Text>
</TextBlock>
Run Code Online (Sandbox Code Playgroud)

我知道我可以在代码隐藏中完成这项工作 - 但是我希望将我的代码隐藏为空并在XAML中执行.这是代码隐藏代码:

private void FilesList_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    double x = 0;

    foreach (FileInfo fileInfo in FilesList.SelectedItems)
    {
        x += fileInfo.Length;
    }
}
Run Code Online (Sandbox Code Playgroud)

apa*_*dit 6

你将不得不使用转换器.一个例子:Xaml:




<MultiBinding StringFormat=" {0} Files Selected. {1} MB">
                        <Binding ElementName="FilesList" Path="SelectedItems.Count"></Binding>
                        <Binding ElementName="FilesList" Path="SelectedItems" Converter="{StaticResource sumconverter}"></Binding>
                </MultiBinding>

代码隐藏:


[ValueConversion(typeof(ListViewItem[]), typeof(string))]
    class SumConverter : IValueConverter {
        public object Convert( object value, Type targetType, object parameter, CultureInfo culture ) {
            int size = 0;
            ListViewItem[] items = (ListViewItem[])value;
            if(items != null){
                foreach(var lvi in items){
                    Someclass sc = lvi.content as Someclass;
                    if(sc!=null){
                        size += sc.Size;
                    }
                }
            }
            return (size / 1000) + "MB";
        }

        public object ConvertBack( object value, Type targetType, object parameter, CultureInfo culture ) {
            return null;
        }
    }