微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Tabcontrol:是否可以让来自不同 Tabitem 的 Control 相互通信?

如何解决Tabcontrol:是否可以让来自不同 Tabitem 的 Control 相互通信?

是否可以让来自不同 Tabitem 的控件相互通信? 我做了很多研究,但找不到任何可以帮助我的东西,所以我开始怀疑是否可以让 Tabcontrol 中的 2 个不同 Tabitems 的 2 个控件相互通信。

在我的例子中,我想从 Tabitem A 上的 Button 发出一个命令来更改 Tabitem B 上文本框中显示的字符串。

非常感谢每一种帮助或示例。

我如何创建标签(示例)

<TabItem  DataContext="{Binding TypenschildVM,Source= {StaticResource vm_Für_Typenschild} }"  Loaded="Typenschild_Loaded"  FontSize="15"  Height="50" Foreground="White"  FontWeight="Bold"  Background="#401746" Header="Typenschild" BorderBrush="#FFACACAC" Margin="56,-119,0">
        <view:TypenschildV    Width="Auto" Height="Auto"  HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" Margin="1,0"/>
    </TabItem>

我的 Singelton 模型(所有其他模型都继承自它)

 public  class DateiM 
{
    private static DateiM instance = null;
    private static readonly object padlock = new object();
    public string XMLDatei
    {
        get;
        set;
    }

    public static DateiM Instance
    {
        get
        {
            lock (padlock)
            {
                if (instance == null)
                {
                    instance = new DateiM();
                }
                return instance;
            }
        }
    }
}

视图 A 的模型

 public class TypenschildM : DateiM
    {
        public DateiM datei = DateiM.Instance;
        private static TypenschildM instance = null;
        private static readonly object padlock = new object();

        public  string Hardwareversion { get; set; } 
        public  string Maschinennummer { get; set; }
        public  string Seriennummer { get; set; }
        public  string Kundennummer { get; set; }
        public  string Datum_Auslieferung { get; set; }
        public  string Formatkennung { get; set; }
        public  string Gewicht { get; set; }
        public  string Versorgungsdruck { get; set; }
        public static TypenschildM Instance
        {
            get
            {
                lock (padlock)
                {
                    if (instance == null)
                    {
                        instance = new TypenschildM();
                    }
                
                    return instance;
                }
            }
        }
        public TypenschildM()
        {
            //Hardwareversion =  PropTest;
        }
    }    

我想显示属性的数据绑定

 <TextBox  Text="{Binding PropTest,Source={StaticResource vm_Für_Typenschild},Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"  x:Name="textBoxTyp" Height="22" Margin="243,93,133,0" textwrapping="Wrap"  VerticalAlignment="Top" Background="#FFF3F3F3" Grid.Column="2"/>

解决方法

这不是关于控件之间的通信,而是关于数据模型的内部“业务”逻辑。 基本上,您是说要更改一个模型中的字符串(显示在选项卡 B 上的文本框中)以在单击按钮时更改(按钮任意位置,在您的情况下是选项卡 A)。 GUI 中的字符串应该更改,不是因为您在选项卡之间进行通信,而是因为底层数据模型中的字符串已更改并且绑定机制已通知视图更改。

话虽如此,您如何编写基于来自另一个数据模型的回调更改一个数据模型中的属性的逻辑?这几乎取决于您,但一种常见的机制可能是使用信使类或中介者设计模式。

示例:一个按钮绑定到 ViewModel 中的 ICommand,然后 ViewModel 将更改通知应用程序的其余部分(直接更改字符串属性,或发送将由模型处理的消息,或触发中介等)。然后,当底层数据模型中的字符串属性发生变化时,INotifyPropertyChanged 机制就会启动并更新文本字段中的文本。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。