[编辑]例reprodoucing这个问题Host to AddIn issue我的视图模型不提供当前变量值
我想写一个主机应用程序是可扩展的,并且使用几个接口。其中之一是
public MessageCreator GetMessageCreator()
{
var creator = new AVL2MessageCratorFactory();
return creator.Create(new AVL2DataForMessageCreatingImpl { Imei = VM.Imei });
}
从外接程序和下面你可以找到外接程序客户应用的XAML:从视图模型
using System.ComponentModel;
namespace AVL2SimulatorAddView
{
public class AVL2ViewModel : INotifyPropertyChanged
{
readonly AVL2Model _avl2Model = new AVL2Model();
public string Imei
{
get { return _avl2Model.Imei; }
set
{
if (value == _avl2Model.Imei) return;
_avl2Model.Imei = value;
OnPropertyChanged("Imei");
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
var handler = PropertyChanged;
if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
}
}
}
在调试模式
<UserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:AVL2SimulatorAddView="clr-namespace:AVL2SimulatorAddView" x:Class="AVL2SimulatorAddView.AVL2AddInUI">
<Grid Height="46" Width="344">
<Grid.DataContext>
<AVL2SimulatorAddView:AVL2ViewModel x:Name="VM" />
</Grid.DataContext>
<Label Content="Starting IMEI" Margin="0,0,255,0" Height="29" VerticalAlignment="Top" />
<TextBox Text="{Binding Path=Imei, UpdateSourceTrigger=PropertyChanged }" Margin="120,2,48,0" Width="176" Height="27" VerticalAlignment="Top" />
</Grid>
维明财产我看到ViewModel中的属性更新每个字符都写在TextBox中,但是当GetMessag时eCreator()从主机应用程序被称为它看起来像新的空虚拟机和它的Imei返回(我没有看到主机应用端Imei)
我错过了一些保护.NET中反对绕过绑定数据?其他“硬编码”字符串传递良好。主机应用程序端的MVVM和DataContext也可以正常工作。我尝试了不同类型的UpdateSourceTrigger,但它似乎总是在AddIn方面工作,并且它不提供共享接口的当前日期。
[编辑] 其它控制绑定到IMEI,显示上线的变化,当数据在文本框中输入
调用本地按钮适当地设定标签内容从
private void button1_Click(object sender, RoutedEventArgs e)
{
label1.Content = VM.Imei;
}
临时呼叫方法主机应用程序
var msgCreator = _tabsMap[(TabItem) tabControl1.SelectedItem].GetMessageCreator();
你描述的不是WPF的“行为”,其实这个问题很奇怪。很难说出是怎么回事,我建议你把简单的测试项目放在一起来证明这一点。粘贴你的整个视图模型。 – 2014-10-20 15:31:18
一般来说,在我的粘贴代码中,这几乎是整个ViewModel - 只有INotifyPropertyChanged成员,并且缺少_avl2Model(包含一个字符串属性的类)声明。 很难准备示例,因为我认为这与.NET中的AddIn相关 - 我的项目中的所有MVVM都能正常工作。即使访问此AddIn中的虚拟机也可以将其绑定到其他控件并不断更新,或者可以通过简单的分配直接请求标签内容。 – 2014-10-20 15:53:14
谁在调用'GetMessageCreator'方法? – 2014-10-20 16:39:33