8

我必须跟随ProgressIndicator

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

并在与此视图相关的 ViewModel 中实现

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

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

System.Windows.Data 错误:40:BindingExpression 路径错误:在“对象”“ProgressIndicator”(名称=“progressIndicator”)上找不到“ProgressVisibility”属性。BindingExpression:Path=ProgressVisibility; DataItem='ProgressIndicator'(名称='progressIndicator');

目标元素是'ProgressIndicator'(名称='progressIndicator');目标属性是“可见性”(类型“可见性”) System.Windows.Data 错误:40:BindingExpression 路径错误:在“对象”“ProgressIndicator”(名称=“progressIndicator”)上找不到“ProgressVisibility”属性。BindingExpression:Path=ProgressVisibility; DataItem='ProgressIndicator'(名称='progressIndicator');

目标元素是'ProgressIndicator'(名称='progressIndicator');目标属性是“可见性”(类型“可见性”) System.Windows.Data 错误:40:BindingExpression 路径错误:在“对象”“ProgressIndicator”(名称=“progressIndicator”)上找不到“ProgressVisibility”属性。BindingExpression:Path=ProgressVisibility; DataItem='ProgressIndicator'(名称='progressIndicator');

目标元素是'ProgressIndicator'(名称='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();

那么,为什么绑定失败?

谢谢你的时间。

4

1 回答 1

7

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

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

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

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

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

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

你可以这样做:

<MahAppsControls:ProgressIndicator Width="100"
                               Height="10"
                               VerticalAlignment="Center"
                               ProgressColour="White" 
                               Visibility="{Binding ElementName=Self, Path=DataContext.ProgressVisibility}"/>
于 2013-08-14T19:46:13.237 回答