C# 2个WPF和一个DLL,模型更改通知
我试图在MVVM之后的解决方案中创建两个WPF项目和一个DLL项目 第一个WPF用作第二个WPF的管理面板(例如:您编写文本,按下按钮,文本将显示在第二个WPF窗口中) 我想把我的模型放到DLL里 我的问题是,我不知道如何在第二个WPF中显示文本(notify?) 我在viewmodel中实现了INotifyPropertyChanged 然后我陷入困境,我不知道该怎么办 我的解决方案如下所示: WPF_溶液C# 2个WPF和一个DLL,模型更改通知,c#,.net,wpf,xaml,mvvm,C#,.net,Wpf,Xaml,Mvvm,我试图在MVVM之后的解决方案中创建两个WPF项目和一个DLL项目 第一个WPF用作第二个WPF的管理面板(例如:您编写文本,按下按钮,文本将显示在第二个WPF窗口中) 我想把我的模型放到DLL里 我的问题是,我不知道如何在第二个WPF中显示文本(notify?) 我在viewmodel中实现了INotifyPropertyChanged 然后我陷入困境,我不知道该怎么办 我的解决方案如下所示: WPF_溶液 显示WPF MainWindow.xaml 动态链接库 Text.cs: 管理
- MainWindow.xaml
- Text.cs:
- DisplayViewModel.cs
- MainWindow.xaml
公共类文本
{
字符串_text显示;
///
///要在屏幕上显示的文本
///
公共字符串文本显示
{
获取{return\u textToDisplay;}
设置{u textToDisplay=value;}
}
}
DisplayViewModel.cs:
公共类DisplayViewModel:INotifyPropertyChanged
{
私人文本(u Text),;
///
///构造ToDisplayViewModel的默认实例
///
公共显示视图模型()
{
_text=新文本();
}
///
///访问者
///
公共文本
{
获取{return\u text;}
设置{u text=value;}
}
公共字符串文本显示
{
获取{return Text.TextToDisplay;}
设置
{
if(Text.TextToDisplay!=值)
{
Text.TextToDisplay=值;
RaisePropertyChanged(“TextToDisplay”);
}
}
}
公共事件属性更改事件处理程序属性更改;
私有void RaisePropertyChanged(字符串propertyName)
{
//复制一份以防止线程问题
PropertyChangedEventHandler处理程序=PropertyChanged;
if(处理程序!=null)
{
处理程序(这是新的PropertyChangedEventArgs(propertyName));
}
}
}
管理小组:
公共部分类主窗口:窗口
{
私有显示视图模型_displayThings;
private Affichage.MainWindow _displayer=new Affichage.MainWindow();
公共主窗口()
{
初始化组件();
_displayThings=(DisplayViewModel)base.DataContext;
_displayer.Show();
}
私有void disp_btn_Click(对象发送方,路由目标)
{
_displayThings.TextToDisplay=textBox.Text;
}
}
WPF只是控制窗口中的一个按钮和一个文本框,以及显示窗口中的一个文本框。链接到viewmodel
文本框由Text=“{Binding TextToDisplay}
绑定
我的Viewmodel也应该在DLL中共享吗
如何通知其他项目模型发生了更改?删除以下标记,因为它将创建DisplayViewModel类的新实例:
<Window.DataContext>
<!-- Declaratively create an instance of DisplayViewModel -->
<local:DisplayViewModel />
</Window.DataContext>
请不要在标题中添加“已关闭”或“已解决”之类的内容。发生了什么变化?你找到一个简单的bug了吗?或者下面的答案是否帮助您解决了问题?如果是第一个,请添加一个包含一些详细信息的答案,然后您可以将其选为正确答案。如果是第二个,请选择下面的答案作为正确答案。我没有真正解决任何问题,我只是重新编写了整个代码,这几乎就是我试图做的。(很抱歉“关闭”我不知道该怎么做,因为我已经修改了所有内容,我应该删除该帖子)你可以,但是有了一个新帐户,删除的问题可能会自动被禁止。添加您自己的答案并选择正确的答案可能看起来很奇怪,但我们通常都是这样做的。
public partial class MainWindow : Window
{
private DisplayViewModel _displayThings = = new DisplayViewModel();
private Affichage.MainWindow _displayer = new Affichage.MainWindow();
public MainWindow()
{
InitializeComponent();
_displayer.DataContext = _displayThings;
_displayer.Show();
}
private void disp_btn_Click(object sender, RoutedEventArgs e)
{
_displayThings.TextToDisplay = textBox.Text;
}
}