0

我正在玩WPF。这是无法按我想要的方式工作的代码。

<ListView Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" ItemsSource="{Binding FilesToUpload}">
            <ListView.View>
                <GridView>
                    <GridViewColumn Header="Filename" DisplayMemberBinding="{Binding FileName}">
                    </GridViewColumn>
                    <GridViewColumn Header="Uploaded" DisplayMemberBinding="{Binding Uploaded}">
                    </GridViewColumn>
                </GridView>
            </ListView.View>
        </ListView>

ListView 的 ItemsSource 绑定到返回此类集合的类的属性。

public class FileInformation
        {
            public String FileName { get; set; }
            public ProgressBar Uploaded { get; set; }

            public FileInformation(String file)
            {
                FileName = file;
                Uploaded = new ProgressBar();
                Uploaded.Value = 8;
                Uploaded.BorderThickness = new System.Windows.Thickness(5);
            }
        }

上面 xaml 示例中的 GridView 有两列。一个绑定到 FileInformation 类的属性 FileName,另一个绑定到 Uploaded。

问题是。Uploaded 属性返回一个 ProgressBar,但绑定到 Uploaded 的列的内容是一个字符串(我猜是 ProgressBar 的 ToString() 方法的返回值。)。

有什么建议我可以显示 ProgressBar 而不是 String?

4

3 回答 3

4

尝试这个:

            <GridViewColumn Header="Progress">
                <GridViewColumn.CellTemplate>  
                    <DataTemplate>
                        <ProgressBar Maximum="100" Value="{Binding Uploaded.Value}"/>
                    </DataTemplate>
                 </GridViewColumn.CellTemplate>  
            </GridViewColumn>
于 2012-04-05T09:37:21.453 回答
1

将绑定中从 FrameworkElement 继承的对象作为源是一个非常糟糕的主意。

创建一个仅存储视图(xaml 文件)中定义的 ProgressBar 数据的类。

public class ProgressBarViewModel : INotifiedPropertyChanged
{
    //add INotifyPropertyChanged implementation

    //add Properties you want to bind to the ProgressBar
    ...

    //For example
    public double Value { //getter, setter methods. Raise PropertyChanged in setter if value changed}
   ...
}

现在,您的 Uploaded 属性应该返回 ProgressBarViewModel 的一个实例,您可以通过多种方式将此实例绑定到 ProgressBar。

我向您展示一种方法:

        <GridViewColumn Header="Uploaded">
            <GridViewColumn.CellTemplate>
                <DataTemplate>
                    <ProgressBar Value="{Binding Path=Uploaded.Value}"/>
                </DataTemplate>
            </GridViewColumn.CellTemplate>
        </GridViewColumn>

注意:绑定中上传的是您的 FileInformation 类的属性

于 2012-04-05T09:38:48.777 回答
0

wpf 不支持类型绑定,它只绑定 ti 属性。因此,如果您需要绑定进度条,则需要将progressbase 放置在普通列中。您还可以基于视图库创建自定义视图

请参阅以下链接中的示例。

http://blogs.msdn.com/b/atc_avalon_team/archive/2006/04/28/585844.aspx

于 2012-04-05T09:33:03.283 回答