2012-04-05 6 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에는 두 개의 열이 있습니다. 하나는 FileInformation 클래스의 FileName 속성에 바인딩되고 다른 하나는 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 속성 만 바인딩합니다. 따라서 진행 표시 줄을 바인딩해야하는 경우 일반 열의 진행률 인스턴스를 배치해야합니다. 당신은 또한 뷰베이스에 기초한 커스텀 뷰를 생성 할 수 있습니다.

아래 예제를보십시오.

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의 인스턴스를 반환해야합니다 그리고 당신은 여러 가지 방법으로의 ProgressBar이 하나를 바인딩 할 수 있습니다.

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

:

내가 당신에게 한 가지 방법을 보여 바인딩에 업로드

관련 문제