在哪里放置供不同用户控件使用的文本框?

where to put the textbox that for different UserControls to use?

在我的 WPF 程序中。我有一个 DataModel.cs、MainWindow.xaml & MainWindow.xaml.cs 和许多 UserControl.xaml & UserControl.xaml.cs,它们以这种方式集成到 MainWindow.xaml 中:

    <Border...>
        <UserControl1/>
    </Border>
    <Border...>
        <UserControl2/>
    </Border>
    ...

不知道能不能叫MVVM?

我的一些 UserControl.xaml.cs 需要使用相同的字符串进行连接,应该在 UI 文本框的某处输入,如下所示:

DataModel.connection.Connect("[textbox.text]");

我的问题是我应该把这个文本框放在哪里,以便每个 UserControl 都可以访问它,以及如何访问它?谢谢

  1. 我认为你需要阅读更多关于 MVVM 的知识,简短的回答,只要你不直接在你的 ViewModel 中引用和 UI 元素,你就可以认为它是 MVVM。

  2. 有多种方法可以实现,我会定义并与

    交互

    public 接口 IProvideTextProperty {string SomeText{get;set;}}

    在所有使用此 属性

  3. 的用户控件中实现此接口
  4. 在UI的MainWindow中有一个文本框,将此TextBox的文本属性绑定到SomeText(MainWindow的viewmodel也实现了IProvideTextProperty),在setter中循环IProvideTextProperty 和设置 SomeProperty 的所有视图模型。

您在 DataModel class 中创建了一个 string 属性:

public class DataModel : INotifyPropertyChanged
{
    private string _text;
    public string Name
    {
        get { return _text; }
        set
        {
            _text = value;
            OnPropertyChanged(nameof(Name));
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    private void OnPropertyChanged(string property)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(property));
    }
}

...并将视图中的 TextBox 绑定到此 string 属性:

<TextBox Text="{Binding Text, UpdateSourceTrigger=PropertyChanged}" />

假设您将 window 的 DataContext 设置为您的 DataModel class:

的实例
public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        DataContext = new DataModel();
    }
}

...只要您在 TextBox 中输入内容,来源 属性 (Text) 就会更新。如果让 UserControls 从父 window 继承 DataContext,即不要在某处显式设置 UserControlsDataContext,它们可以绑定到Text 属性 并获取最新值 "automatically" 作为 DataModel 实现 INotifyPropertyChanged 接口并引发 PropertyChanged 事件。

这就是基本 MVVM 的大致工作方式。