2013-08-14 14 views
8

devo seguente ProgressIndicatorerrore di binding con MahAppsMetro ProgressIndicator

<MahAppsControls:ProgressIndicator Width="100" 
            Height="10" 
            VerticalAlignment="Center" 
            ProgressColour="White" 
            Visibility="{Binding ProgressVisibility}"/> 

e nel ViewModel ascociated con questa Altri implemento

private Visibility progressVisibility = Visibility.Collapsed; 
public Visibility ProgressVisibility 
{ 
    get { return progressVisibility; } 
    set 
    { 
     if (value == progressVisibility) 
      return; 
     progressVisibility = value; 
     this.OnPropertyChanged("ProgressVisibility"); 
    } 
} 

Il problema è questo legame sta fallendo e non so perché. Utilizzando Snoop Ho il seguente

System.Windows.Data Error: 40 : BindingExpression path error: 'ProgressVisibility' property not found on 'object' ''ProgressIndicator' (Name='progressIndicator')'. BindingExpression:Path=ProgressVisibility; DataItem='ProgressIndicator' (Name='progressIndicator');

target element is 'ProgressIndicator' (Name='progressIndicator'); target property is 'Visibility' (type 'Visibility') System.Windows.Data Error: 40 : BindingExpression path error: 'ProgressVisibility' property not found on 'object' ''ProgressIndicator' (Name='progressIndicator')'. BindingExpression:Path=ProgressVisibility; DataItem='ProgressIndicator' (Name='progressIndicator');

target element is 'ProgressIndicator' (Name='progressIndicator'); target property is 'Visibility' (type 'Visibility') System.Windows.Data Error: 40 : BindingExpression path error: 'ProgressVisibility' property not found on 'object' ''ProgressIndicator' (Name='progressIndicator')'. BindingExpression:Path=ProgressVisibility; DataItem='ProgressIndicator' (Name='progressIndicator');

target element is 'ProgressIndicator' (Name='progressIndicator'); target property is 'Visibility' (type 'Visibility')

Mi rendo conto che ci sia un errore di vincolante, ma io pongo del DataContext finestra principale nei App.xaml.cs via

MainWindow window = new MainWindow(); 
MainWindowViewModel mainWindowViewModel = new MainWindowViewModel(); 

// When the ViewModel asks to be closed, close the window. 
EventHandler handler = null; 
handler = delegate 
{ 
    mainWindowViewModel.RequestClose -= handler; 
    window.Close(); 
}; 
mainWindowViewModel.RequestClose += handler; 

// Allow all controls in the window to bind to the ViewModel by setting the 
// DataContext, which propagates down the element tree. 
window.DataContext = mainWindowViewModel; 
window.Show(); 

Quindi, Perché il legame fallendo?

Grazie per il vostro tempo.

+0

Questo è un brutto uno - non stai facendo niente di male, è un "bug" nel modo in cui è costruito MahApps :( –

risposta

7

Il problema è un errore nel controllo MahApps.ProgressIndicator.

Se si guarda al source code, si noterà che sovrascrive il DataContext a se stesso:

public ProgressIndicator() 
{ 
     InitializeComponent(); 
     this.DataContext = this; 

Come tale, è necessario ovviare a questa limitazione (stupido) legandosi ad un elemento nominare direttamente, evitando efficacemente l'utilizzo della normale associazione dati.

Per esempio, se il nome del tuo Window (in XAML), vale a dire:

<Window ... 
    Name="Self"> 
    <!--... 

si potrebbe fare:

<MahAppsControls:ProgressIndicator Width="100" 
           Height="10" 
           VerticalAlignment="Center" 
           ProgressColour="White" 
           Visibility="{Binding ElementName=Self, Path=DataContext.ProgressVisibility}"/> 
+0

Dannato, non pensavo che questo potesse essere un bug di MahApp. Stupido me. Grazie mille per il tuo tempo Reed, è molto apprezzato ... – MoonKnight

+0

sai guardare la fonte? Usi la libreria MahApps? – MoonKnight

+0

@ Killercam No - solo un'ipotesi, dal momento che il tuo xaml/codice sembrava giusto, ma sta usando una lib open source, che non è sempre di alta qualità;) –

Problemi correlati