使用MahAppsMetro ProgressIndicator绑定失败

Moo*_*ght 8 c# wpf binding mahapps.metro

我必须跟随 ProgressIndicator

<MahAppsControls:ProgressIndicator Width="100"
                                   Height="10"
                                   VerticalAlignment="Center"
                                   ProgressColour="White" 
                                   Visibility="{Binding ProgressVisibility}"/>
Run Code Online (Sandbox Code Playgroud)

并且在ViewModel中与此View实现相关联

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

问题是这种绑定失败了,我不知道为什么.使用Snoop我有以下内容

System.Windows.Data错误:40:BindingExpression路径错误:在'object'''ProgressIndicator'(Name ='progressIndicator')'上找不到'ProgressVisibility'属性.BindingExpression:路径= ProgressVisibility; DataItem ='ProgressIndicator'(Name ='progressIndicator');

target元素是'ProgressIndicator'(Name ='progressIndicator'); 目标属性是'可见性'(类型'可见性')System.Windows.Data错误:40:BindingExpression路径错误:'对象'上没有'ProgressVisibility'属性'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' BindingExpression:路径= ProgressVisibility; DataItem ='ProgressIndicator'(Name ='progressIndicator');

target元素是'ProgressIndicator'(Name ='progressIndicator'); 目标属性是'可见性'(类型'可见性')System.Windows.Data错误:40:BindingExpression路径错误:'对象'上没有'ProgressVisibility'属性'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' BindingExpression:路径= ProgressVisibility; DataItem ='ProgressIndicator'(Name ='progressIndicator');

target元素是'ProgressIndicator'(Name ='progressIndicator'); 目标属性是"可见性"(类型"可见性")

我感谢有一个绑定错误,但我DataContext在App.xaml.cs中设置主窗口

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();
Run Code Online (Sandbox Code Playgroud)

那么,为什么绑定失败了?

谢谢你的时间.

Ree*_*sey 7

问题是MahApps.ProgressIndicator控件中的错误.

如果您查看源代码,您会注意到它会覆盖DataContext自身:

public ProgressIndicator()
{
        InitializeComponent();
        this.DataContext = this;
Run Code Online (Sandbox Code Playgroud)

因此,您需要通过直接绑定到元素名称来解决此(愚蠢)限制,从而有效避免使用普通数据绑定.

例如,如果您为Window(在xaml中)命名,即:

<Window ...
    Name="Self">
    <!--...
Run Code Online (Sandbox Code Playgroud)

你可以这样做:

<MahAppsControls:ProgressIndicator Width="100"
                               Height="10"
                               VerticalAlignment="Center"
                               ProgressColour="White" 
                               Visibility="{Binding ElementName=Self, Path=DataContext.ProgressVisibility}"/>
Run Code Online (Sandbox Code Playgroud)