【发布时间】:2018-08-08 19:02:49
【问题描述】:
我有一个带有 content control 和 custom control 的 WPF 表单。 content control 基于单选按钮选择交换视图。一旦用户对视图执行操作,我将父 viewmodel(包含两个控件的 WPF 表单)上的 nocustomer 设置为 false。发生这种情况时,content control 的可见性会正确消失。不幸的是,custom control 的可见性保持不变(它也应该消失了)。我实际上很困惑,因为在我看来它们具有完全相同的实现,因此应该表现相同。
<ContentControl x:Name="ViewSwap" Content="{Binding SearchingViewModel}"
Visibility="{Binding NoCustomer, Converter={StaticResource
BooleanToVisibilityConverter}, Mode=OneWay}">
<ContentControl.Style>
<Style TargetType="{x:Type ContentControl}">
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=SearchOptions, Path=IsSelected}" Value="0">
<Setter Property="ContentTemplate" Value="{StaticResource AddressTemplate}" />
</DataTrigger>
</Style.Triggers>
</Style>
</ContentControl.Style>
</ContentControl>
<views:CTACallSubmit x:Name="CallSubmit"
Visibility="{Binding NoCustomer, Converter={StaticResource
BooleanToVisibilityConverter}, Mode=OneWay}"/>
更新:
MainWindow 的DataContext
public partial class CTALight : Window
{
public CTALight()
{
InitializeComponent();
this.DataContext = CTALightViewModel.GetInstance();
}
}
主视图模型
public class CTALightViewModel : ObservableObject
{
public static CTALightViewModel _mainViewModel;
public static CTALightViewModel GetInstance()
{
if (_mainViewModel == null)
_mainViewModel = new CTALightViewModel();
return _mainViewModel;
}
private CTALightViewModel()
{
}
}
CTACallSubmit DataContext
<UserControl.DataContext>
<viewmodel:CTACallSubmitViewModel />
</UserControl.DataContext>
【问题讨论】:
-
他们有相同的DataContext吗?您是否在某处明确设置了 CTACallSubmit 的 DataContext?
-
已更新。根据您的问题,我认为我需要明确说明 nocustomer 住在哪里。在这种情况下,我绑定的窗口的数据上下文将数据传递给用户控件的属性(可见性)。
-
当您将 UserControl 的 DataContext 显式设置为 CTACallSubmitViewModel 实例时,
<views:CTACallSubmit Visibility="{Binding NoCustomer ...}"/>之类的绑定需要 CTACallSubmitViewModel 实例中的 NoCustomer 属性。这可能不是你想要的。通常不应显式设置 UserControl 的 DataContext,而应使用从父控件继承的 DataContext。 -
如果有特定于用户控件但不特定于父控件的功能(即从下拉框中加载其他字段)会发生什么?
标签: wpf data-binding custom-controls visibility contentcontrol