C# 设置用户控件可见性
我有一个不具有约束力的属性,无法找出问题所在。有人能帮忙吗?我的转换器正在为其他绑定控件运行,因此没有问题。设置断点时,我从未看到属性IsMyControl Visible被命中 我将此行添加到属性MyControlViewModels中:C# 设置用户控件可见性,c#,wpf,xaml,mvvm,C#,Wpf,Xaml,Mvvm,我有一个不具有约束力的属性,无法找出问题所在。有人能帮忙吗?我的转换器正在为其他绑定控件运行,因此没有问题。设置断点时,我从未看到属性IsMyControl Visible被命中 我将此行添加到属性MyControlViewModels中: this.NotifyPropertyChanged(m => m.IsMyControlVisible); 当它被命中时,它会导致我的属性集被命中,但控件的可见性不会发生任何变化,即使我可以看到值为true。该控件是完全功能性的,我只是无法让它以
this.NotifyPropertyChanged(m => m.IsMyControlVisible);
当它被命中时,它会导致我的属性集被命中,但控件的可见性不会发生任何变化,即使我可以看到值为true。该控件是完全功能性的,我只是无法让它以编程方式显示。此外,我的可见性转换器适用于其他视图,因此这不是问题所在
看起来(对我来说)绑定设置不正确,如果我能让它工作,控件的可见性就会工作
我的控件位于TabControl中,TabControl位于我视图上的网格中
我发现这篇文章最接近我的问题,并尝试了它,但没有成功:
ConfigurationEditorView.xaml:
<ctrls:MyControl Grid.Row="0"
Visibility="{Binding Path=IsMyControlVisible,
Converter={StaticResource booleanToStringConverter},
FallbackValue=Hidden}" />
ConfigurationEditorViewModel:
public bool IsMyControlVisible
{
get
{
return this.MyControlViewModels.Count > 0;
}
}
private ObservableCollection<MyControlViewModel> myControlViewModels
= new ObservableCollection<MyControlViewModel>();
public ObservableCollection<MyControlViewModel> MyControlViewModels
{
get
{
return this.myControlViewModels;
}
set
{
this.myControlViewModels = value;
this.NotifyPropertyChanged(m => m.myControlViewModels);
this.NotifyPropertyChanged(m => m.IsMyControlVisible);
}
}
您正在使用boolToString转换器,实际上需要可见性 您正在使用boolToString转换器,实际上需要可见性 您正在使用boolToString转换器,实际上需要可见性 您正在使用boolToString转换器,实际上需要可见性 在编写代码时,只有当有人将
ObservableCollection
的新实例分配给您的MyControlViewModels
属性时,才会收到通知。相反,在setter中,您可以在创建视图模型的任何地方编写
set
{
if (myControlViewModels != null)
{
myControlViewModels.CollectionChanged -= OnControlViewModelsChanged;
}
this.myControlViewModels = value;
this.NotifyPropertyChanged(m => m.IsMyControlVisible);
if (myControlViewModels != null)
{
myControlViewModels.CollectionChanged += OnControlViewModelsChanged;
}
}
在哪里
另一个小点是:通常情况下,对于类型为
ObservableCollection
的属性,您不会有setter—它将是get only,您将在构造函数中创建它。这将简化一些代码(比如不需要取消订阅更改事件)。请参见示例ItemsControl.Items
(它不使用可观察的集合,模式相同)。在编写代码时,只有当有人将observeCollection
的新实例分配给MyControlViewModels
属性时,才会收到通知。相反,在setter中,您可以在创建视图模型的任何地方编写
set
{
if (myControlViewModels != null)
{
myControlViewModels.CollectionChanged -= OnControlViewModelsChanged;
}
this.myControlViewModels = value;
this.NotifyPropertyChanged(m => m.IsMyControlVisible);
if (myControlViewModels != null)
{
myControlViewModels.CollectionChanged += OnControlViewModelsChanged;
}
}
在哪里
另一个小点是:通常情况下,对于类型为
ObservableCollection
的属性,您不会有setter—它将是get only,您将在构造函数中创建它。这将简化一些代码(比如不需要取消订阅更改事件)。请参见示例ItemsControl.Items
(它不使用可观察的集合,模式相同)。在编写代码时,只有当有人将observeCollection
的新实例分配给MyControlViewModels
属性时,才会收到通知。相反,在setter中,您可以在创建视图模型的任何地方编写
set
{
if (myControlViewModels != null)
{
myControlViewModels.CollectionChanged -= OnControlViewModelsChanged;
}
this.myControlViewModels = value;
this.NotifyPropertyChanged(m => m.IsMyControlVisible);
if (myControlViewModels != null)
{
myControlViewModels.CollectionChanged += OnControlViewModelsChanged;
}
}
在哪里
另一个小点是:通常情况下,对于类型为
ObservableCollection
的属性,您不会有setter—它将是get only,您将在构造函数中创建它。这将简化一些代码(比如不需要取消订阅更改事件)。请参见示例ItemsControl.Items
(它不使用可观察的集合,模式相同)。在编写代码时,只有当有人将observeCollection
的新实例分配给MyControlViewModels
属性时,才会收到通知。相反,在setter中,您可以在创建视图模型的任何地方编写
set
{
if (myControlViewModels != null)
{
myControlViewModels.CollectionChanged -= OnControlViewModelsChanged;
}
this.myControlViewModels = value;
this.NotifyPropertyChanged(m => m.IsMyControlVisible);
if (myControlViewModels != null)
{
myControlViewModels.CollectionChanged += OnControlViewModelsChanged;
}
}
在哪里
另一个小点是:通常情况下,对于类型为
ObservableCollection
的属性,您不会有setter—它将是get only,您将在构造函数中创建它。这将简化一些代码(比如不需要取消订阅更改事件)。例如,请参见ItemsControl.Items
(它不使用可观察的集合,模式是相同的)。您可以使用一个。您试图获取的值是一个名为Visibility的枚举,而不是字符串。您可以使用一个。您试图获取的值是一个名为Visibility的枚举,而不是字符串。您可以使用一个。您试图获取的值是一个名为Visibility的枚举,而不是字符串。您可以使用一个。您试图获取的值是一个名为Visibility的枚举,而不是字符串。您在哪里向ObservableCollection添加项?无论何时添加或删除项,都必须对IsmyControl Visible进行属性更改。另外,如果您怀疑绑定有问题,您应该检查输出窗口中的绑定错误。我正在引发属性更改…this.NotifyPropertyChanged(m=>m.IsMyControlVisible);我会检查我的输出,看看我是否看到了什么。谢谢。您在哪里向ObservableCollection添加项目?无论何时添加或删除项,都必须对IsmyControl Visible进行属性更改。另外,如果您怀疑绑定有问题,您应该检查输出窗口中的绑定错误。我正在引发属性更改…this.NotifyPropertyChanged(m=>m.IsMyControlVisible);我会检查我的输出,看看我是否看到了什么。谢谢。您在哪里向ObservableCollection添加项目?无论何时添加或删除项,都必须对IsmyControl Visible进行属性更改。另外,如果您怀疑绑定有问题,您应该检查输出窗口中的绑定错误。我正在引发属性更改…this.NotifyPropertyChanged(m=>m.IsMyControlVisible);我会检查我的输出,看看我是否看到了什么。谢谢。您在哪里向ObservableCollection添加项目?你将不得不提出一项财产变更申请