2012-02-16 6 views
0

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

ответ

1

Одним из вариантов было бы создать свойство зависимостей в вашем дочернем классе для привязки текста. Затем вы можете просто привязать выбранный элемент к доступу к указанному свойству.

Вот где-то, чтобы начать работу с этой http://msdn.microsoft.com/en-us/library/ms750428.aspx

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

Редактировать Базовый класс

public class BaseExample : ContentControl 
{ 
    public string BaseText 
    { 
     get { return (string)this.GetValue(BaseTextProperty); } 
     set { this.SetValue(BaseTextProperty, value); } 
    } 
     public static readonly DependencyProperty StateProperty = DependencyProperty.Register(
"BaseText", typeof(string), typeof(BaseExample),new PropertyMetadata(false)); 
} 


public class child : BaseExample { } 

здесь вы бы унаследовать управляет что-то похожее на

<local:BaseExample 
x:Class="child" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:local="YourAssembly"> </localBaseExample> 
+0

вы могли бы дать мне пример с созданием базы управления, чтобы поставить свойства зависимостей ребенка в? – Calvin

0

С маршрутизируемые события могут пузыриться визуальное дерево, воспользоваться SelectionChanged событие из Selector. Я предполагаю, что две вещи:

  • вы с помощью ComboBox (который происходит от Selector)
  • ваш взгляд ребенка вложен внутри родительского вида

если эти предположения верны, то вам могли бы сделать что-то вроде этого:

вид родитель

<UserControl 
    x:Class="Views.ParentView" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:v="clr-namespace:Views"> 
    <!-- you can handle bubbled events outside the control of where it originated --> 
    <Grid 
     Selector.SelectionChanged="Grid_SelectionChanged"> 
     <v:ChildView 
      x:Name="Child" /> 
    </Grid> 
</UserControl> 

Родитель вид кода за

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

namespace Views 
{ 
    public partial class ParentView : UserControl 
    { 
     public ParentView() 
     { 
      InitializeComponent(); 
     } 

     private void Grid_SelectionChanged(object sender, SelectionChangedEventArgs e) 
     { 
      // because selectors allow multiple selections, a list is used. 
      foreach (object selectedItem in e.AddedItems) 
      { 
       // do stuff with your selected items 
      } 
     } 
    } 
} 

вид Детский

<UserControl 
    x:Class="Views.ChildView" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Grid> 
     <ComboBox> 
      <ComboBoxItem>One</ComboBoxItem> 
      <ComboBoxItem>Two</ComboBoxItem> 
      <ComboBoxItem>Three</ComboBoxItem> 
     </ComboBox> 
    </Grid> 
</UserControl> 
Смежные вопросы