【发布时间】:2012-04-16 08:58:05
【问题描述】:
我有一个奇怪的行为绑定DataContext & IsEnabled UserControl 的属性。
在我的页面中,我使用这样的 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>
【问题讨论】:
-
您从未真正说出您的问题。请这样做。
-
嗨,丹尼尔,问题是,用户控件不像按钮那样被启用/禁用。
-
我认为绑定 DataContext 属性不是一个好主意。为什么要为用户控件这样做?它似乎适用于没有它的按钮。
-
我的 UserControl 也有一个 ViewModel (MVVM),父 viewModel 使用来自 UserControlViewModel 的属性。
-
我不确定我是否理解正确,但是绑定datacontext属性会导致datacontext一次又一次地被永久设置。而是使用适当的 BindingPath。例如。 Https.CurrentServiceState
标签: c# wpf binding user-controls