2013-10-27 3 views
0

아이디어는 이렇게하는 것입니다. Username.text 값을 주 윈도우의 텍스트 상자에 성공적으로 전달한 로그인 페이지가 있습니다.viewmodel 싱글 톤 인스턴스를 만드는 방법은 무엇입니까?

이제 모든 하위 페이지의 텍스트 상자로 전달할 기본 창에서이 username.text 값이 필요합니다. 프로그램이 어떤 사용자가 로그인했는지 알 수 있도록하고, 누가 데이터베이스를 변경했는지 기록 할 수 있습니다.

내가 알고있는 일방적 인 데이터 바인딩은이 작업을 수행하는 가장 좋은 방법이지만, MainWindow와 하위 페이지간에 작업 할 viewmodel singleton 인스턴스를 만들어야한다는 것을 이해합니다.

이것은 내가 실패한 것입니다. 이 코드는 같은 페이지에서 잘 작동합니다.

<TextBox x:Name="username" Text="{Binding Text, ElementName=alias, Mode=OneWayToSource, UpdateSourceTrigger=PropertyChanged}" Height="19" VerticalAlignment="Top" HorizontalAlignment="Left" Width="211" FontSize="11"/> 

<TextBox x:Name="alias" Margin="186,64,0,0" Height="18" VerticalAlignment="Top" HorizontalAlignment="Left" Width="211" FontSize="11" ></TextBox> 

다른 페이지에도 있지만, 아무 것도 없습니다.

코드 하위 페이지

<UserControl x:Class="Masca.Mail.Configuration" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mui="http://firstfloorsoftware.com/ModernUI" 
    mc:Ignorable="d" 
    d:DesignHeight="800" d:DesignWidth="1280"> 

<TextBox x:Name="alias" Margin="186,64,0,0" Height="18" VerticalAlignment="Top" HorizontalAlignment="Left" Width="211" FontSize="11" ></TextBox> 

0123에 대한 MainWindow를

<mui:ModernWindow x:Class="Masca.MainWindow" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:mui="http://firstfloorsoftware.com/ModernUI" 
Title="Masca Database Admin" Height="800" Width="1280" IsTitleVisible="True" 
LogoData="F1 M 24.9015,43.0378L 25.0963,43.4298C 26.1685,49.5853 31.5377,54.2651 38,54.2651C 44.4623,54.2651 49.8315,49.5854 50.9037,43.4299L 51.0985,43.0379C 51.0985,40.7643 52.6921,39.2955 54.9656,39.2955C 56.9428,39.2955 58.1863,41.1792 58.5833,43.0379C 57.6384,52.7654 47.9756,61.75 38,61.75C 28.0244,61.75 18.3616,52.7654 17.4167,43.0378C 17.8137,41.1792 19.0572,39.2954 21.0344,39.2954C 23.3079,39.2954 24.9015,40.7643 24.9015,43.0378 Z M 26.7727,20.5833C 29.8731,20.5833 32.3864,23.0966 32.3864,26.197C 32.3864,29.2973 29.8731,31.8106 26.7727,31.8106C 23.6724,31.8106 21.1591,29.2973 21.1591,26.197C 21.1591,23.0966 23.6724,20.5833 26.7727,20.5833 Z M 49.2273,20.5833C 52.3276,20.5833 54.8409,23.0966 54.8409,26.197C 54.8409,29.2973 52.3276,31.8106 49.2273,31.8106C 46.127,31.8106 43.6136,29.2973 43.6136,26.197C 43.6136,23.0966 46.127,20.5833 49.2273,20.5833 Z"   
ContentSource="/Pages/Home.xaml"> 

    <Window.DataContext> 
<TextBox x:Name="username" Text="{Binding Text, ElementName=alias, Mode=OneWayToSource, UpdateSourceTrigger=PropertyChanged}" Height="19" VerticalAlignment="Top" HorizontalAlignment="Left" Width="211" FontSize="11"/> 

코드에 대한

누구든지이 작업을 수행하는 방법을 알고 있습니까?

+1

Google에서 싱글 톤 구현을 찾았습니까? – makc

+0

아직 특정 단어 조합을 시도하지 않았습니다. 지금하고있어. – Offer

답변

0

MEF를 사용하는 Cinch MVVM 프레임 워크를 사용하여 ViewModel을 인스턴스화/삽입하는 것이 좋습니다. Singleton ViewModel을 만드는 일은 적절한 내보내기 특성을 사용하면 정말 쉽습니다.

프로젝트 사이트를 확인하십시오. 나는 그것을 사용하는 것이 좋습니다. 당신이 MVVM을 사용하고 목표 viewmodels간에 데이터를 공유하는 경우

http://cinch.codeplex.com/

+1

신드롬에서는 [PartCreationPolicy (CreationPolicy.Shared)]를 통해 가능합니다. – Tobias

0

는 당신이 필요로하는 것은 Mediator/EventAggregator입니다. 로그인이 성공하면 MainViewModel은 Mediator에 데이터를 게시 할 수 있으며 다른 모든 ViewModel은이 메시지를 수신하고 UserName에 대한 해당 속성을 업데이트 할 수 있습니다. 이들에

더 읽기 :

EventAggregator : http://blogs.u2u.be/diederik/post/2011/01/15/Using-the-Prism-40-Event-Aggregator.aspx

중재자 : 당신이 정말로 당신의 ViewModel 싱글을 만들고 싶어하고있는 경우 http://marlongrech.wordpress.com/2009/04/16/mediator-v2-for-mvvm-wpf-and-silverlight-applications/

그러나 모든 뷰에 대한 DataContext, 당신이 원하는 이 MSDN C#에서 싱글 톤 구현에 대한 페이지를 읽으십시오.

관련 문제