【问题标题】:Binding Failure with MahAppsMetro ProgressIndicatorMahAppsMetro ProgressIndicator 绑定失败
【发布时间】:2013-08-16 22:40:19
【问题描述】:

我必须关注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' (Name='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');目标属性是“可见性”(类型“可见性”)

我感谢存在绑定错误,但我正在通过

在 App.xaml.cs 中设置主窗口的 DataContext
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();

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

感谢您的宝贵时间。

【问题讨论】:

  • 这很糟糕 - 你没有做错任何事情,这是 MahApps 构建方式中的一个“错误”:(

标签: c# wpf binding mahapps.metro


【解决方案1】:

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

如果您查看source code,您会注意到它会将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}"/>

【讨论】:

  • 你的酷。没想到这可能是一个 MahApp 错误。愚蠢的我。非常感谢您抽出宝贵时间 Reed,非常感谢...
  • 你怎么知道要看源码?你使用 MahApps 库吗?
  • @Killercam 否 - 只是猜测,因为您的 xaml/代码看起来正确,但它使用的是开源库,这并不总是最高质量 ;)
  • 嗯,非常感谢。我正在使用新应用程序在自己的时间学习 MVVM/WPF,而且我在各个方面都在努力 [老实说]!
  • @Killercam 我从reedcopsey.com/series/windows-forms-to-mvvm 得到了很好的反馈(如果你有兴趣)
猜你喜欢
  • 2012-01-14
  • 2012-02-25
  • 2015-02-02
  • 2013-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-06
  • 2015-11-30
相关资源
最近更新 更多