在我的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都可以访问它以及如何访问它?感谢。
答案 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)
我认为你需要阅读更多关于MVVM的简短回答,只要你没有直接在你的ViewModel中引用和UI元素,就可以把它视为MVVM。
有多种方法可以做到,我会用
定义和界面public interface IProvideTextProperty {string SomeText {get; set;}}
在使用此属性的所有UserControl中实现此接口