現在、MEFedMVVM フレームワークを使用して ViewModel にアクセスしていますが、現在使用されている別の ViewModel からデータを取得する方法を知りたいです。これは、Cinch の使用と組み合わされています。
現在、私のタブ コントロールは次のように定義されています。
<Window.Resources>
<DataTemplate DataType="{x:Type CinchV2:WorkspaceData}">
<AdornerDecorator>
<Border HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
CinchV2:NavProps.ViewCreator="{Binding}"/>
</AdornerDecorator>
</DataTemplate>
</Window.Resources>
ビューが読み込まれると、メイン ウィンドウの ViewModel は次のようにセットアップされます。
private void ViewAwareStatusService_ViewLoaded()
{
if (Designer.IsInDesignMode)
return;
//String imagePath = ConfigurationManager.AppSettings["YourImagePath"].ToString();
WorkspaceData loginWorkSpace = new WorkspaceData(null, "LoginUserControl", null, "Login", true);
WorkspaceData aboutWorkspace = new WorkspaceData(null, "About", null, "About", true);
WorkspaceData viewAlbumsWorkspace = new WorkspaceData(null, "ViewAlbums", null, "View Albums", true);
WorkspaceData readReviewSelectWorkspace = new WorkspaceData(null, "ReadReviewsSelect", null, "Select Review", true);
WorkspaceData adminWorkspace = new WorkspaceData(null, "Admin", null, "Admin", true);
Views.Add(aboutWorkspace);
Views.Add(loginWorkSpace);
Views.Add(readReviewSelectWorkspace);
Views.Add(viewAlbumsWorkspace);
SetActiveWorkspace(aboutWorkspace);
UserName = new DataWrapper<string>(this, UserNameChangeArgs);
UserName.IsEditable = true;
//UserName.DataValue = ConfigurationManager.AppSettings["UserName"];
UserRole = new DataWrapper<string>(this, UserNameChangeArgs);
UserRole.IsEditable = true;
//UserRole.DataValue = ConfigurationManager.AppSettings["UserType"];
}
MainWindow ViewModel は、以下のように構成された ViewModelBase クラス (Cinch クラス) を継承します。
namespace Cinch
{
public abstract class ViewModelBase : INotifyPropertyChanged, ICinchDisposable, IParentablePropertyExposer
{
public ViewModelBase();
public SimpleCommand<object, object> CloseActivePopUpCommand { get; }
public SimpleCommand<object, object> CloseWorkSpaceCommand { get; }
public string DisplayName { get; set; }
public bool IsCloseable { get; set; }
protected virtual bool ThrowOnInvalidPropertyName { get; }
public ObservableCollection<WorkspaceData> Views { get; set; }
public event EventHandler<EventArgs> ActivateRequest;
public event EventHandler<CloseRequestEventArgs> CloseRequest;
public event EventHandler<EventArgs> CloseWorkSpace;
public event Action<string> FocusRequested;
public event PropertyChangedEventHandler PropertyChanged;
public void Dispose();
public Delegate[] GetINPCSubscribers();
protected void NotifyPropertyChanged(PropertyChangedEventArgs args);
protected void NotifyPropertyChanged(string propertyName);
protected virtual void OnDispose();
public virtual void RaiseActivateRequest();
public virtual void RaiseCloseRequest(bool? dialogResult);
public void RaiseFocusEvent(string focusProperty);
public void SetActiveWorkspace(WorkspaceData viewnav);
[DebuggerStepThrough]
[Conditional("DEBUG")]
public void VerifyPropertyName(string propertyName);
}
今私ができるようにしたいのは、ViewModel を持つ UserControl である loginWorkspace 内のボタン クリックから、LoginViewModel から MainWindow の Views ObservableCollection に Admin タブを追加することです。