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)
那么,为什么绑定失败了?
谢谢你的时间.
问题是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)