问题描述
是否可以让来自不同 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 机制就会启动并更新文本字段中的文本。