2013-10-27 2 views
0

(все в wpf)Как передать значение текстового поля в текстовое поле дочерней страницы

У меня есть окно входа в систему с именем пользователя и паролем. Когда пользователь входит в систему, значение имени пользователя передается в другое текстовое поле username.text в MainWindow. Это я успешно выполнил, передав строковое значение в объявлении формы. Точно так же, как обычно, в winforms.

Теперь способ доступа к моим дочерним страницам осуществляется через ссылки.

например: Link DisplayName = "Home" Source = "/ Pages/Home.xaml" />, поэтому содержимое дочерних страниц отображается в главном окне. как будто главное окно - это какой-то кадр.

Теперь мне нужно то, что этот username.text в MainWindow имеет свое значение, переданное в текстовые поля username.text на дочерних страницах.

Я делаю это так, чтобы программа узнала, какой пользователь регистрируется в журнале, может регистрировать, кто вносит изменения в базу данных.

Я понимаю, что самый эффективный метод, заключающийся в том, что это одностороннее связывание данных. теперь это работает на той же странице ... но это не работает в другой странице и в главном окне.

<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> 

Есть ли кто-нибудь, кто знает, как это сделать?

код 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"/> 
</Window.DataContext> 

код для ребенка страницы

<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"> 



<Grid HorizontalAlignment="Left" Height="780" Margin="10,10,0,0" VerticalAlignment="Top" Width="1260"> 

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


</Grid> 

это XAML и для MainWindow и страницы ребенка.

+0

Являются ли данные Контекст для MainWindow и дочерней страницы одинаковыми? если нет, то сделайте это, сделав экземпляр ViewModel SingleTon. – Kumareshan

+0

по контексту данных yo mean: да? имя пользователя находится между этими двумя открывающими и закрывающими тегами, но на дочерней странице нет. я должен что-то с этим делать? – Offer

+0

О, извините. Просто понял. Попытка сейчас. – Offer

ответ

1

В вас вид модели Expose статическое свойство, как показано ниже

public class ViewModel 
{ 
    private static ViewModel instance=new ViewModel(); 

    public static Viewmodel Instance 
    { 
    get 
    { 
     return instance; 
    } 
    } 
} 

И в обоих Xmal.cs (MainWindow.xmal.cs и ChildPage.Xmal.cs файлы в конструкторе установить контекст данных

DataContext=Viewmodel.Instance 

И изменение TextBinding в обоих Xmal следующим

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

    <TextBox x:Name="alias" Text="{Binding PropertyInViewModel, UpdateSourceTrigger=PropertyChanged} Margin="186,64,0,0" Height="18" VerticalAlignment="Top" HorizontalAlignment="Left" Width="211" FontSize="11" ></TextBox> 
+0

Я, вероятно, собираюсь сходить так же, как и в этот момент. Статическое свойство, идет ли оно на обе страницы? и конструктором вы имеете в виду объявление формы с помощью «initializecomponent()»? – Offer

+0

Хорошо, я только что понял, что мне нужно создать ... Как это сделать? – Offer

0

Вы можете создать статический класс

public static class Credentials 
{ 
    public static string username { get; set;} 
} 

Присвоить его во время входа в систему, тогда вы можете позвонить ему в базовом классе VM или в каждой класе, в которой вы нуждаетесь.

Смежные вопросы