WPF DataBinding 与其他命名空间/类

Posted

技术标签:

【中文标题】WPF DataBinding 与其他命名空间/类【英文标题】:WPF DataBinding with other Namespace/Class 【发布时间】:2015-04-22 23:55:33 【问题描述】:

我在使用 WPF 进行数据绑定时遇到问题。我有一个 Webservice(WCF) 到一个 Windows 服务应用程序和一个 WPF 应用程序来控制服务。在 WPF 应用程序中,我构建了一个文本框,我想在其中接收来自 WebService 的日志。

此时我可以从同一个命名空间(WPF 应用程序)发送新数据,但是当我使用我的数据类的实例从(WCF 应用程序)发送它时,它不会反映文本框中的新数据。

这是我的代码:

MainWindow.xaml

...
   <Grid Name="grid" Margin="0,0,346.6,4">
       <TextBox Name="Log" Text="Binding Path=LogText" ScrollViewer.CanContentScroll="True" IsReadOnly="True" BorderThickness="0" Background="Transparent" HorizontalAlignment="Left" TextWrapping="Wrap" VerticalAlignment="Top" Grid.Column="2" Margin="30.8,35,-325.8,0" Height="303" Grid.RowSpan="2" Width="295"/>
   </Grid>
...

MainWindow.xaml.cs

public MainWindow()
    
                InitializeComponent();
                grid.DataContext = Logs.Instance;
                ...
    

public class Logs : INotifyPropertyChanged

           private static Logs instance;

           private Logs()  

           public static Logs Instance
           
              get 
              
                 if (instance == null)
                 
                     instance = new Logs();
                 
                 return instance;
              
           

            public event PropertyChangedEventHandler PropertyChanged;

            protected void Notify(string propName)
            
                if (this.PropertyChanged != null)
                
                    PropertyChanged(this,new PropertyChangedEventArgs(propName));
                
             

            private string _LogText = "";

            public string LogText
            
                get
                
                    return _LogText;
                
                set
                
                    _LogText = value;
                    Notify("LogText");
                
            

            public void LogBinding(String text)
            
                LogText = text + LogText;
            

WCF Webservice 发送文本调用(其他命名空间)

Using "THE NAMESPACE OF WPF APP";

Logs.Instance.LogBinding("Some Text");

谢谢!

【问题讨论】:

【参考方案1】:

从您的描述看来,您有两个独立的应用程序,它们作为独立的进程运行。静态实例不会跨进程共享,即使它们是同一个类。您需要使用某种形式的跨进程通信将数据从您的 Windows 服务传递到您的 WPF 应用程序。

【讨论】:

你是对的!!我的应用程序在不同的进程中运行!!!谢谢你让我清醒。那么你推荐的交流方式是:命名管道之类的东西?? 是的,命名管道是解决这种情况的好方法。

以上是关于WPF DataBinding 与其他命名空间/类的主要内容,如果未能解决你的问题,请参考以下文章

databinding错误Error:(11) Error parsing XML: duplicate attribute

WPF基础篇----命名空间

C++函数通过头文件分享给其他源文件时,使用命名空间方式,和使用类中静态函数方式,有何区别?

带有 LiveCharts 的 WPF 在运行时添加带有 DataBinding 的系列

无法在WPF中创建继承的usercontrol,本地命名空间中的基本控件“不存在”

PHP命名空间与use