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には2つの列があります。1つはクラスFileInformationのプロパティFileNameにバインドし、もう1つはUploadedにバインドします。

問題は。UploadedプロパティはProgressBarを返しますが、Uploadedにバインドする列のコンテンツは文字列です(ProgressBarのToString()メソッドの戻り値だと思います)。

文字列の代わりにプログレスバーを表示する方法についての提案はありますか?

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にバインドできます。

私はあなたに1つの方法を示します:

        <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プロパティのみをバインドします。したがって、プログレスバーをバインドする必要がある場合は、通常の列の代わりにプログレスベースを配置する必要があります。ビューベースに基づいてカスタムビューを作成することもできます

以下のリンクの例を参照してください。

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

于 2012-04-05T09:33:03.283 に答える