C# 2个WPF和一个DLL,模型更改通知

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: 管理

我试图在MVVM之后的解决方案中创建两个WPF项目和一个DLL项目

第一个WPF用作第二个WPF的管理面板(例如:您编写文本,按下按钮,文本将显示在第二个WPF窗口中)

我想把我的模型放到DLL里

我的问题是,我不知道如何在第二个WPF中显示文本(notify?)

我在viewmodel中实现了INotifyPropertyChanged

然后我陷入困境,我不知道该怎么办

我的解决方案如下所示:

WPF_溶液

  • 显示WPF
    • MainWindow.xaml
  • 动态链接库
    • Text.cs:
  • 管理WPF
    • DisplayViewModel.cs
    • MainWindow.xaml
  • 显示和管理都引用DLL

    Text.cs:

    公共类文本
    {
    字符串_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;
        }
    }