将属性绑定到两个不同的控件[重复]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将属性绑定到两个不同的控件[重复]相关的知识,希望对你有一定的参考价值。
这个问题在这里已有答案:
我有一个带有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()
{
}
}
CTACall提交DataContext
<UserControl.DataContext>
<viewmodel:CTACallSubmitViewModel />
</UserControl.DataContext>
答案
下面创建了一个CTACallSubmitViewModel
的新实例,并将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
的UserControl
通常是一个坏主意,因为它打破了父母的DataContext
的继承。
以上是关于将属性绑定到两个不同的控件[重复]的主要内容,如果未能解决你的问题,请参考以下文章