我正嘗試在MVVM模式之後的WAF框架的基礎上創建應用程序。目前,我的解決方案由兩個項目(每個項目配備了MEF和MAF引用)的:未插入視圖值,但從ViewModel中檢索
- *。應用(控股控制器和的ViewModels)
- * .Presentation(控股實際視圖文件)
我通過ViewModel接口創建視圖和視圖模型之間的綁定 - 請參閱下面的代碼段。此外,所有類都可以通過App.xaml.cs文件內的MEF框架獲得。在這裏,控制器也被初始化。在最簡單的情況下,我想在主窗口的標籤中顯示一個字符串值。
這裏的問題是:如果我啓動應用程序,第二個標籤的值只顯示後退值,但是屬性的get方法正確調用(通過調試模式選中)。 View和ViewModel之間的綁定似乎是正確的 - 如果我將xaml中的綁定路徑更改爲不存在的屬性,我會得到一個輸出,該屬性無法在ViewModel中找到。我的印象是,視圖更新的事件可能存在問題?有關這種奇怪行爲的任何建議?
這裏是視圖模型的專家:
[Export]
public class MainWindowViewModel : ViewModel<IMainWindowView>
{
private string _labelContent;
public string LabelContent
{
get { return _labelContent; }
set { SetProperty(ref _labelContent, value); }
}
[ImportingConstructor]
public MainWindowViewModel(IMainWindowView view) : base(view)
{
}
}
這裏是控制器的exerpt:
[Export(typeof(IMainWindowController))]
public class MainWindowController : IMainWindowController
{
private MainWindowViewModel _mainWindowViewModel;
public MainWindowViewModel MainWindowViewModel
{
get { return _mainWindowViewModel; }
set { _mainWindowViewModel = value; }
}
[ImportingConstructor]
public MainWindowController(MainWindowViewModel mainWindowViewModel)
{
_mainWindowViewModel = mainWindowViewModel;
}
public void Initialize()
{
_mainWindowViewModel.LabelContent = "stfu";
}
}
視圖接口:
public interface IMainWindowView : IView
{
}
和視圖本身:
[Export(typeof(IMainWindowView))]
public partial class MainWindow : Window, IMainWindowView
{
public MainWindow()
{
InitializeComponent();
}
}
<Window x:Class="MyCompany.Product.Redesign.Presentation.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<StackPanel>
<Label Content="Test" />
<Label Name="MyLabel" Content="{Binding Path=LabelContent, FallbackValue=Fallback}" />
</StackPanel>
</Window>
你的viewmodel是否實現'INotifyPropertyChanged'?屬性設置者是否會提出'PropertyChanged'事件來通知有關更改的視圖? – nabulke 2014-11-05 10:06:05
當然,這是通過ViewModel接口完成的 –
fstegmaier
2014-11-05 11:33:58