Tabcontrol:是否可以让来自不同 Tabitem 的控件相互通信?
Tabcontrol: Is It possible to let Controls from different Tabitems comunicate with each other?
是否可以让来自不同 Tabitem 的控件相互通信?
我做了很多研究,但找不到任何可以帮助我的东西,所以我开始怀疑是否有可能让 Tabcontrol 中 2 个不同 Tabitems 的 2 个控件相互通信。
在我的例子中,我想从 Tabitem A 上的按钮触发命令,以更改 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,0,-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"/>
这不是关于控件之间的通信,而是关于数据模型的内部 'business' 逻辑。
基本上你是说你想更改一个模型中的字符串(显示在选项卡 B 上的文本框中)以在单击按钮时更改(按钮在任何地方,在你的情况下在选项卡 A 上)。
GUI 中的字符串应该发生变化,不是因为您在选项卡之间进行通信,而是因为底层数据模型中的字符串发生了变化并且绑定机制已通知视图发生变化。
话虽如此,您如何编写根据另一个数据模型的回调在一个数据模型中更改 属性 的逻辑?这几乎取决于您,但常见的机制可能是使用信使 class 或中介设计模式。
一个例子:一个按钮被绑定到 ViewModel 中的一个 ICommand,然后 ViewModel 通知你的应用程序的其余部分更改(直接更改字符串 属性,或者发送一条消息由模型处理,或触发中介等)。然后,当底层数据模型中的字符串 属性 发生变化时,INotifyPropertyChanged 机制将启动并更新文本字段中的文本。
是否可以让来自不同 Tabitem 的控件相互通信? 我做了很多研究,但找不到任何可以帮助我的东西,所以我开始怀疑是否有可能让 Tabcontrol 中 2 个不同 Tabitems 的 2 个控件相互通信。
在我的例子中,我想从 Tabitem A 上的按钮触发命令,以更改 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,0,-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"/>
这不是关于控件之间的通信,而是关于数据模型的内部 'business' 逻辑。 基本上你是说你想更改一个模型中的字符串(显示在选项卡 B 上的文本框中)以在单击按钮时更改(按钮在任何地方,在你的情况下在选项卡 A 上)。 GUI 中的字符串应该发生变化,不是因为您在选项卡之间进行通信,而是因为底层数据模型中的字符串发生了变化并且绑定机制已通知视图发生变化。
话虽如此,您如何编写根据另一个数据模型的回调在一个数据模型中更改 属性 的逻辑?这几乎取决于您,但常见的机制可能是使用信使 class 或中介设计模式。
一个例子:一个按钮被绑定到 ViewModel 中的一个 ICommand,然后 ViewModel 通知你的应用程序的其余部分更改(直接更改字符串 属性,或者发送一条消息由模型处理,或触发中介等)。然后,当底层数据模型中的字符串 属性 发生变化时,INotifyPropertyChanged 机制将启动并更新文本字段中的文本。