2013-08-14 20 views
8

tôi phải sau ProgressIndicatorKhông Binding với MahAppsMetro ProgressIndicator

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

và trong ViewModel ascociated có tầm nhìn này, tôi thực hiện

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

Vấn đề là này ràng buộc là không và tôi không biết tại sao. Sử dụng Snoop Tôi đã sau

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')

Tôi đánh giá cao rằng có một lỗi ràng buộc, nhưng tôi thiết lập các cửa sổ chính của DataContext trong App.xaml.cs qua

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

Vì vậy, Tại sao sự ràng buộc thất bại?

Cảm ơn thời gian của bạn.

+0

Đó là một khó chịu một - bạn không làm điều gì sai trái, đó là một "lỗi" trong cách MahApps được xây dựng: ( –

Trả lời

7

Sự cố là lỗi trong điều khiển MahApps.ProgressIndicator.

Nếu bạn nhìn vào source code, bạn sẽ nhận thấy rằng nó ghi đè DataContext với bản thân:

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

Như vậy, bạn sẽ cần phải làm việc xung quanh này giới hạn (ngu ngốc) bằng cách gắn vào một yếu tố tên trực tiếp, có hiệu quả tránh sử dụng các ràng buộc dữ liệu bình thường.

Ví dụ, nếu bạn đặt tên của bạn Window (trong XAML), ví dụ:

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

Bạn có thể làm:

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

Chết tiệt của bạn mát mẻ. Đã không nghĩ rằng đây có thể là một lỗi MahApp. Ngu ngốc tôi của tôi. Cảm ơn rất nhiều cho thời gian của bạn Reed, nó được nhiều đánh giá cao ... – MoonKnight

+0

Làm thế nào bạn có biết xem mã nguồn không? Bạn có sử dụng thư viện MahApps không? – MoonKnight

+0

@Killercam Không - chỉ cần đoán, vì mã xaml/mã của bạn có vẻ đúng, nhưng nó sử dụng lib nguồn mở, không phải lúc nào cũng là chất lượng hàng đầu;) –