我有一张带有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();
}
}
MainViewModel
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>
答案 0 :(得分:1)
以下内容创建了componentDidMount() {
this.range.rangeslider();
}
的新实例,并将CTACallSubmitViewModel
的{{1}}设置为此实例。
DataContext
这意味着除非您指定绑定源,否则绑定到其他视图模型的UserControl
属性将无法工作:
<UserControl.DataContext>
<viewmodel:CTACallSubmitViewModel />
</UserControl.DataContext>
设置NoCustomer
这样的<views:CTACallSubmit x:Name="CallSubmit"
Visibility="{Binding DataContext.NoCustomer,
RelativeSource={RelativeSource AncestorType=Window},
Converter={StaticResource BooleanToVisibilityConverter}, Mode=OneWay}"/>
通常是一个坏主意,因为它会破坏父DataContext
的继承。