0

(すべて wpf で)

ユーザー名とパスワードを使用したログイン ウィンドウがあります。ユーザーがログインすると、ユーザー名の値が MainWindow の別の username.text テキスト ボックスに渡されます。これは、フォーム宣言で文字列値を渡すことで成功しました。通常の winform と同じ方法です。

現在、子ページにアクセスする方法はリンクを介しています。

例: Link DisplayName= "Home" Source="/Pages/Home.xaml" /> したがって、子ページのコンテンツがメイン ウィンドウに表示されます。メインウィンドウがある種のフレームであるかのように。

今必要なのは、この MainWindow の username.text の値が、子ページの 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 です。

4

2 に答える 2

1

あなたのViewモデルでは、以下のように静的プロパティを公開します

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

そして、両方の Xmal で TextBinding を次のように変更します。

  <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>
于 2013-10-27T13:07:04.607 に答える