Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在UserControl上绑定DataContext和IsEnabled属性的奇怪行为_C#_Wpf_Binding_User Controls - Fatal编程技术网

C# 在UserControl上绑定DataContext和IsEnabled属性的奇怪行为

C# 在UserControl上绑定DataContext和IsEnabled属性的奇怪行为,c#,wpf,binding,user-controls,C#,Wpf,Binding,User Controls,我有一个绑定DataContext的奇怪行为&UserControl的IsEnabled属性 在我的页面中,我使用如下UserControl: <httpsPort:HttpsPort DataContext="{Binding Path=Https}" IsEnabled="{Binding CurrentServiceState, Converter={StaticResource ServiceStateIsConfigableConverter}}" /> 我尝试在

我有一个绑定DataContext的奇怪行为&UserControl的IsEnabled属性

在我的页面中,我使用如下UserControl:

<httpsPort:HttpsPort DataContext="{Binding Path=Https}"
    IsEnabled="{Binding CurrentServiceState, Converter={StaticResource ServiceStateIsConfigableConverter}}" />
我尝试在UserControls绑定上使用FallbackValue=False,但UserControls甚至被禁用

有人能解释这些行为吗? 非常感谢

更新:

我的解决方法:

<Grid IsEnabled="{Binding CurrentServiceState, Converter={StaticResource ServiceStateIsConfigableConverter}}">
    <httpsPort:HttpsPort DataContext="{Binding Path=Https}" />
</Grid>

您不应该绑定自己的DataContext。任何绑定操作都使用DataContext,因此绑定DataContext是一个循环操作。即使这样做有效,也无法保证绑定的创建顺序,因此可以在DataContext绑定到其新值之前绑定IsEnabled属性

相反,您应该指定属性的完整路径。例如:

<httpsPort:HttpsPort IsEnabled="{Binding Https.CurrentServiceState, Converter={StaticResource ServiceStateIsConfigableConverter}}" />

你从来没有说过你的问题。请这样做。嗨,daniel,问题是usercontrol不像按钮那样被en/禁用。我认为绑定DataContext属性不是一个好主意。为什么要为用户控件这样做?没有它的按钮似乎可以工作。我的UserControl也有一个ViewModel MVVM,父ViewModel使用UserControlViewModel中的属性。我不确定我是否理解正确,但是绑定datacontext属性会导致datacontext被一次又一次地永久设置。而是使用适当的绑定路径。例如Https.currentServiceState好的,我理解绑定顺序的问题。其主要思想是将一组控件作为用户控件外包。这些groupbox用于两种pageViewModels。这些ViewModels需要访问UserControlViewModel get port&selected证书,但pageviewmodels应该能够禁用usercontrol,例如服务正在运行。也许,我的解决方案不是最好的方式。。。请注意,CurrentServiceState不是https的属性,它是父视图模型页面的属性,然后从每个页面视图模型中公开您的UserControlViewModel。DataContext仍然指向PageViewModel,您可以使用完整路径绑定用户控件属性,如我的回答所示。
<Grid IsEnabled="{Binding CurrentServiceState, Converter={StaticResource ServiceStateIsConfigableConverter}}">
    <httpsPort:HttpsPort DataContext="{Binding Path=Https}" />
</Grid>
<httpsPort:HttpsPort IsEnabled="{Binding Https.CurrentServiceState, Converter={StaticResource ServiceStateIsConfigableConverter}}" />