【问题标题】:XAML element binding between 2 files?2个文件之间的XAML元素绑定?
【发布时间】:2014-02-06 17:53:07
【问题描述】:

假设我在同一个 XAML 文件中有两个文本框。我希望文本框 2 中的输入来自我在文本框 1 中输入的任何内容。

这很简单(我想,如果我错了,请纠正我):

Textbox x:name="TextBox1" Text="Your Text Here"
Textbox x:name="TextBox2" Text="{Binding ElementName=TextBox1, Path=Text}"

当我将 TextBox2 放入另一个 XAML 文件时,我的理解不足。 TextBox2 不再知道 TextBox1。假设 TextBox1 位于名为“File1.xaml”的文件中,而 TextBox2 位于名为“File2.xaml”的文件中。我可以提供哪些其他信息(以及在何处)来保持这个相同的简单元素链接有效?

【问题讨论】:

  • 考虑学习 MVVM 和声明性数据绑定以在 WPF 中查看模型对象。您的文本框不应直接相互访问 - 相反,它们可以数据绑定到同一个变量(并且更改将在框架级别自动反映)。
  • 谢谢!我理解将它们绑定到变量的想法,但我找不到在最基本层面上发生这种情况的简单示例。我希望只有两个文本框,这可能很简单,可以唤起一个向我解释这个概念的答案。
  • Dean 的回答似乎是对的。您可能想查看介绍 wpf 的 Channel9 视频。相信我,您真的很想稍后将您的演示文稿与您的业务逻辑层分开,并在视图模型中拥有一个单独的变量。这是您了解 WPF 的基础,即使您需要多花几个小时来了解您将在哪里学习而不是构建它,从长远来看,您的生活也会变得更好。

标签: c# wpf xaml binding


【解决方案1】:

您不希望 MVVM 术语中的 Windows、UserControls 或 Views 相互“了解”,因此您有两种选择...

  1. 您的视图共享相同的DataContext,即它们的ViewModel,并且两个TextBoxes 绑定到相同的公共属性ViewModelViewModel 必须支持更改通知)。
  2. 您的Views 有两个不同的DataContexts (ViewModels),您使用消息传递两个公共属性的值,两个TextBoxes 必须来回发送...李>

这是 2 使用 MVVM 框架之一的样子...

查看 1:

DataContext="{Binding ViewModel1, Source={StaticResource Locator}}"
...
Textbox x:name="TextBox1" Text="{Binding MyString1}"

视图模型 1:

private string myString1;
public string MyString1
{
    get { return myString1; }
    set 
       { 
          myString1 = value; 
          NotifyPropertyChanged(m => m.MyString1); 
          SendMessage(MessageTokens.MyString1, new NotificationEventArgs<string>
            ("Message", myString1));
       }
}

查看 2:

DataContext="{Binding ViewModel2, Source={StaticResource Locator}}"
...
Textbox x:name="TextBox2" Text="{Binding MyString2}"

视图模型 2:

RegisterToReceiveMessages<string>(MessageTokens.MyString1, 
    (s, ea) => MyString2 = ea.Data);
...
private string myString2;
public string MyString2
{
    get { return myString2; }
    set 
       { 
          myString2 = value; 
          NotifyPropertyChanged(m => m.MyString2);
       }
}

【讨论】:

    猜你喜欢
    • 2018-08-06
    • 1970-01-01
    • 2020-04-03
    • 2016-10-14
    • 1970-01-01
    • 1970-01-01
    • 2011-07-31
    • 2011-11-24
    • 1970-01-01
    相关资源
    最近更新 更多