将属性绑定到两个不同的控件[重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将属性绑定到两个不同的控件[重复]相关的知识,希望对你有一定的参考价值。

我有一个带有content controlcustom 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的新实例,并将DataContextUserControl设置为此实例。

<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}"/>

像这样设置DataContextUserControl通常是一个坏主意,因为它打破了父母的DataContext的继承。

以上是关于将属性绑定到两个不同的控件[重复]的主要内容,如果未能解决你的问题,请参考以下文章

WPF怎样将两个控件连接起来

根据两个不同对象的变化将文本绑定到转换器[重复]

将属性数据绑定到两个依赖属性中的任何一个

如何将不同类中的两个 Switch 控件绑定到同一个 bool 属性?

有没有更聪明的方法将布局绑定到片段?

绑定到静态类属性[重复]