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有关。我还是很想知道为什么这会造成问题。
您的DataContext指向模型的错误级别。这是一个可能的解决方案
<Grid>
<Border Visibility="{Binding AreAccoutsVisible,
Converter={StaticResource BooleanToVisibilityConverter}}">
<local:AccountListControl DataContext="{Binding AccountListVm}"/>
</Border>
<TextBlock Text="{Binding AreAccountsVisible}"/>
</Grid>