在哪里放置用于不同UserControls的文本框?

时间:2017-12-12 03:33:00

标签: c# wpf xaml mvvm user-controls

在我的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都可以访问它以及如何访问它?感谢。

2 个答案:

答案 0 :(得分:1)

您在string班级中创建了DataModel媒体资源:

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}" />

前提是您将窗口的DataContext设置为DataModel类的实例:

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

...只要您在Text中输入内容,源属性(TextBox)就会更新。如果让UserControls从父窗口继承DataContext,即不在某处明确地设置DataContext的{​​{1}},它们可以绑定到同一个UserControls {1}}属性并在Text实现DataModel界面时“自动”获取最新值,并引发INotifyPropertyChanged事件。

这大致是MVVM的基本工作原理。

答案 1 :(得分:0)

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

  2. 有多种方法可以做到,我会用

    定义和界面

    public interface IProvideTextProperty {string SomeText {get; set;}}

    在使用此属性的所有UserControl中实现此接口

  3. 在UI上有一个MainWindow中的文本框,将此TextBox的textproperty绑定到SomeText(MainWindow的viewmodel也实现了IProvideTextProperty),在setter中循环遍历IProvideTextProperty的所有视图模型并设置SomeProperty。