2012-04-05 1 views
0

私はWPFで少し遊んでいます。ここで私はそれをしたいどのように動作しませんコードです。他のタイプと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> 

ListSourceの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にバインドするカラムの内容はString(ProgressBarの推測値のToString()メソッドの戻り値)です。

文字列の代わりにProgressBarを表示するにはどうすればよいですか?

+1

が直接 'ProgressBar'には結合しないでください、あなたのFileInformationクラスのプロパティです。私は現時点でコードにアクセスすることはできませんが、セルに表示されている矩形の幅をプログレスバーの「値」にバインドすることでプログレスバーを再作成することができます。 – ChrisF

答えて

4

これを試してみてください。

  <GridViewColumn Header="Progress"> 
       <GridViewColumn.CellTemplate> 
        <DataTemplate> 
         <ProgressBar Maximum="100" Value="{Binding Uploaded.Value}"/> 
        </DataTemplate> 
       </GridViewColumn.CellTemplate> 
      </GridViewColumn> 
0

タイプのバインディングはwpfではサポートされていません。これはtiプロパティのみをバインドします。プログレスバーをバインドする必要がある場合は、通常の列のprogressbase insteedを配置する必要があります。ビューベースに基づいてカスタムビューを作成することもできます

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

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

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} 
    ... 
} 

今、あなたのアップロードプロパティはProgressBarViewModelのインスタンスを返す必要があり、あなたはいくつかの方法でプログレスバーにこの1をバインドすることができます。

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

私はあなたに1つの方法を示し、結合にアップロード

関連する問題