2012-04-05 11 views
0

Ich spiele ein bisschen mit WPF herum. Hier ist der Code, der nicht funktioniert, wie ich es will.Wie in WPF mit anderen Typen binden?

Die ItemsSource von ListView bindet an eine Eigenschaft einer Klasse, die eine Auflistung dieser Klasse zurückgibt.

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); 
      } 
     } 

Die GridView aus dem Xaml-Beispiel oben hat zwei Spalten. Einer bindet an die Eigenschaft FileName der Klasse FileInformation und der andere bindet an Uploaded.

Das Problem ist. Die Eigenschaft Uploaded gibt eine ProgressBar zurück, aber der Inhalt der Spalte, die an Uploaded bindet, ist eine Zeichenfolge (der Rückgabewert der ToString() - Methode der ProgressBar, nehme ich an).

Irgendwelche Vorschläge, wie ich die ProgressBar anstelle einer Schnur zeigen kann?

+1

nicht direkt an die 'ProgressBar' binden. Ich habe momentan keinen Zugriff auf den Code, aber Sie sollten in der Lage sein, einen Fortschrittsbalken neu zu erstellen, indem Sie die Breite eines Rechtecks, das in der Zelle angezeigt wird, an den Wert der Fortschrittsleiste binden. – ChrisF

Antwort

4

Try This:

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

Die Bindung von Typen wird in WPF nicht unterstützt, es bindet nur ti Eigenschaften. Wenn Sie also einen Fortschrittsbalken binden müssen, müssen Sie die Fortschrittsbasis in der normalen Spalte platzieren. Sie können auch eine benutzerdefinierte Ansicht basierend auf Viewbase

erstellen, siehe das Beispiel auf der unteren Link.

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

1

Es ist eine sehr schlechte Idee Objekt zu haben, von Framework in Bindungen als Quellen geerbt.

Erstellen Sie eine Klasse, die nur Daten für die in der Ansicht definierte ProgressBar speichert (XAML-Datei).

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

jetzt Ihre Uploaded Eigenschaft sollte eine Instanz des ProgressBarViewModel zurückkehren und Sie können diese zu einem ProgressBar auf verschiedene Weise binden.

zeige ich Ihnen einen Weg:

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

Hinweis: Hochgeladen in der Bindung ist die Eigenschaft Ihrer Klasse 'File

Verwandte Themen