BooleanToVisibilityConverter不工作,但TextBlock验证它应该是.出什么问题了?

本文关键字:什么 问题 工作 验证 TextBlock BooleanToVisibilityConverter | 更新日期: 2023-09-27 17:51:05

我无法使以下代码工作。请注意,TextBlock正在验证propertychanged事件是否按预期触发和更新。TextBlock更新为False,因为它应该,但由于某种原因,本地:AccountListControl不可见。什么好主意吗?

Xaml:

<UserControl.Resources>
    <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
</UserControl.Resources>
<Grid>
  <local:AccountListControl DataContext="{Binding AccountListVm}" 
      Visibility="{Binding AreAccountsVisible,
      Converter={StaticResource BooleanToVisibilityConverter}}"/>
  <TextBlock Text="{Binding AreAccountsVisible}"/>
</Grid>

背后的代码:

public class Page : Notifiable
{
    CoaWorkspace _ws;
    public Page(CoaWorkspace ws)
    {
        _ws = ws;
        ws.Model.Stash.PropertyChanged += PropertyChangedHandler;
        (ws.Model.Stash.Selected as ICoaPackage)
            .PropertyChanged += PropertyChangedHandler;
    }
    public IAccountListVm AccountListVm
    {
        get { return _AccountListVm; }
        protected set { SetField(ref _AccountListVm, value); }
    }
    private IAccountListVm _AccountListVm = null;
    public bool AreAccountsVisible
    {
        get { return _ws.Model.Stash.Selected.Id > 0; }
    }
    private void PropertyChangedHandler(object sender, PropertyChangedEventArgs e)
    {
        if (e.PropertyName == "Selected" ||
            e.PropertyName == "Id") 
                this.OnPropertyChanged("AreAccountsVisible"); 
    }
}

更新

我添加了以下xaml,并确认转换器和绑定工作正常。

<TextBlock Text="TEST TEXT" Visibility="{Binding AreAccountsVisible, Converter={StaticResource BooleanToVisibilityConverter}}"/>

所以它一定与本地:AccountsListControl UserControl有关。我还是很想知道为什么这会造成问题。

BooleanToVisibilityConverter不工作,但TextBlock验证它应该是.出什么问题了?

您的DataContext指向模型的错误级别。这是一个可能的解决方案

<Grid>
  <Border Visibility="{Binding AreAccoutsVisible,
      Converter={StaticResource BooleanToVisibilityConverter}}">
  <local:AccountListControl DataContext="{Binding AccountListVm}"/>
  </Border>
  <TextBlock Text="{Binding AreAccountsVisible}"/>
</Grid>