0

現在、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 タブを追加することです。

4

1 に答える 1

0

メディエーターの使用について読んでください。loginviewmodel からメッセージを送信できます。次に、mainwindowview モデルが適切なメッセージをリッスンできるようにします。

于 2013-04-24T21:30:29.753 に答える