我有一个奇怪的用户控件绑定DataContext
和IsEnabled
属性行为。
在我的页面中,我使用这样的 UserControl:
<httpsPort:HttpsPort DataContext="{Binding Path=Https}"
IsEnabled="{Binding CurrentServiceState, Converter={StaticResource ServiceStateIsConfigableConverter}}" />
还有一个像这样的按钮:
<Button Content="start service"
IsEnabled="{Binding CurrentServiceState, Converter={StaticResource ServiceStateIsConfigableConverter}}"
Command="{Binding CmdConfigureService}" [...] />
解释:
转换器将 currentServiceState-Enum 转换为 bool。我的 Button 的行为符合我的预期(En/DisAbled)。
问题:我的按钮正确启用/禁用,但我的用户控件中的控件没有。
DataContext (HTTPS) 实际上不为空:
private HttpsPortViewModel _https;
public HttpsPortViewModel Https
{
get
{
if (_https == null)
{
_https = new HttpsPortViewModel();
}
return _https;
}
set
{
_https = value;
NotifyPropertyChanged(() => Https);
}
}
我曾尝试在我的 UserControls 绑定上使用 FallbackValue=False,但随后 UserControl 甚至被禁用...
任何人都可以解释这些行为吗?非常感谢。
更新:
我的解决方法:
<Grid IsEnabled="{Binding CurrentServiceState, Converter={StaticResource ServiceStateIsConfigableConverter}}">
<httpsPort:HttpsPort DataContext="{Binding Path=Https}" />
</Grid>