Есть ли способ использовать значение в MainPage и связать его в дочернем окне? - PullRequest
0 голосов
/ 14 ноября 2011

У меня есть приложение Silverlight, в котором есть MainPage, в котором мне нужно назначить переменную Name в дочернем окне и назначить ее без использования дочернего объекта.Мне нужно привязать это значение к текстовому полю в Childwindow через XAML.Как это можно сделать?

До сих пор я использовал свойство зависимости в дочернем окне:

    nameProp = DependencyProperty.Register("strName", typeof(string), typeof(TestWindow), new PropertyMetadata(null, new PropertyChangedCallback(OnNameChange)));

    static TestWindow()
    {
        nameProp = DependencyProperty.Register("strName", typeof(string), typeof(TestWindow), new PropertyMetadata(null, new PropertyChangedCallback(OnNameChange)));
    }

    private static void OnNameChange(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        d.SetValue(nameProp, e.NewValue);
    }

    public string strName
    { 
        get {
        return (string)GetValue(nameProp);
        }

        set {
            SetValue(nameProp, value);
        }
    }

, а в TestWindow XAML я пытаюсь связать его:

       <TextBox Text="{Binding Path=strName}" Height="23" HorizontalAlignment="Left" Margin="126,84,0,0" Name="txtName" VerticalAlignment="Top" Width="120"/>

Как мне установить значение для этого дп из MainPage.Или есть лучшая альтернатива?

Ответы [ 2 ]

0 голосов
/ 14 ноября 2011

Я надеюсь, что это поможет вам .... то, что вы пытаетесь достичь ....

Файл ChildWindow Xaml:

     <controls:ChildWindow x:Class="ParentToChildWindow.ChildWindowControl"

           xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

           xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

           xmlns:controls="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls"

           Width="400" Height="300"

           Title="Pass Data from Parent to ChildWindow">

    <Grid x:Name="LayoutRoot" Margin="2">

        <Grid.RowDefinitions>

            <RowDefinition />

            <RowDefinition Height="Auto" />

        </Grid.RowDefinitions>

        <StackPanel Grid.Row="0" Orientation="Vertical">

            <TextBlock x:Name="txtValue" />

            <TextBlock x:Name="txtName"/>

        </StackPanel>

        <Button x:Name="CancelButton" Content="Cancel" Click="CancelButton_Click" Width="75"

                Height="23" HorizontalAlignment="Right" Margin="0,12,0,0" Grid.Row="1" />

        <Button x:Name="OKButton" Content="OK" Click="OKButton_Click" Width="75" Height="23"

                HorizontalAlignment="Right" Margin="0,12,79,0" Grid.Row="1" />

    </Grid>

</controls:ChildWindow>

Файл ChildWindow CS:

namespace ParentToChildWindow    
{

    using System.Windows;   
    using System.Windows.Controls;

    public partial class ChildWindowControl : ChildWindow    
    {

        public int Value { get; set; }    
        public string Name { get; set; }

        public ChildWindowControl()    
        {   
            InitializeComponent();

        }    
        private void OKButton_Click(object sender, RoutedEventArgs e)    
        {

            this.txtValue.Text = this.Value.ToString();    
            this.txtName.Text = this.Name;    
        }
        private void CancelButton_Click(object sender, RoutedEventArgs e)    
        {
                this.DialogResult = false;

        }

    }

}

Родительский CS-файл: я добавил кнопку в родительский XAML и добавил событие щелчка

 private void HandleButtonClickEvent(object sender, RoutedEventArgs e)    
 {

   ChildWindowControl childControl = new ChildWindowControl();    
   childControl.Value = 10;
   childControl.Name = "Data From Parent XAML to ChildWindow";    
   childControl.Show();

 }

Передать значение в конструктор theChildWindow

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

public ChildWindowControl(int value, string name)    
{

   InitializeComponent();    
   this.Value = value;    
   this.Name = name;

 }

Это все, что требуется для передачи данных из родительского XAML в ChildWindow

0 голосов
/ 14 ноября 2011

Один из способов будет:

  1. Сделать эти переменные общедоступными свойствами вашей главной страницы.
  2. Назначить mainPage для вашего дочернего окна DataContext.
  3. Привязать кэти свойства через XAML в вашем childWindow.
...