2015-03-01 3 views
0

Привет, я попытался создать простой UserControl с тестами TestValue1 и TestValue2 и создал два экземпляра его в панели стека. Но происходит то, что только последний контроль хранит значения в User Control, остальные имеют только пустые значения.Несколько экземпляров UserControl not Binding

enter image description here

Вот код XAML, где они используются:

<userControls:TestControl TestValue1="Vasu" TestValue2="Mahesh"></userControls:TestControl> 
<userControls:TestControl TestValue1="Test" TestValue2="Testing2"></userControls:TestControl> 

Вот XAML в UserControl и код Сзади:

Код За:

public sealed partial class TestControl : UserControl 
    { 
     public TestControl() 
     { 
      this.InitializeComponent(); 
      this.DataContext = this; 
     } 

     public readonly DependencyProperty TestValue1DependencyProperty = DependencyProperty.Register("TestValue1", typeof(string), typeof(TestControl), new PropertyMetadata(default(string))); 
     public string TestValue1 
     { 
      get 
      { 
       return (string)GetValue(TestValue1DependencyProperty); 
      } 
      set 
      { 
       SetValue(TestValue1DependencyProperty, value); 
      } 
     } 

     public readonly DependencyProperty TestValue2DependencyProperty = DependencyProperty.Register("TestValue2", typeof(string), typeof(TestControl), new PropertyMetadata(default(string))); 
     public string TestValue2 
     { 
      get 
      { 
       return (string)GetValue(TestValue2DependencyProperty); 
      } 
      set 
      { 
       SetValue(TestValue2DependencyProperty, value); 
      } 
     } 
    } 

XAML Файл:

<UserControl 
    x:Name="TestControlName" 
    x:Class="downloader.UserControls.TestControl" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="using:downloader.UserControls" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    mc:Ignorable="d" 
    d:DesignHeight="300" 
    d:DesignWidth="400"> 

    <Grid> 
     <StackPanel Orientation="Vertical"> 
      <TextBlock Text="{Binding TestValue1 , ElementName=TestControlName}"></TextBlock> 
      <TextBlock Text="{Binding TestValue2 , ElementName=TestControlName}"></TextBlock> 
     </StackPanel> 
    </Grid> 
</UserControl> 

ответ

0

Решенный!

Уловка была с DataContext:

в XAML в UserControl я создал:

<UserControl 
    x:Name="TestControlName" 
    x:Class="downloader.UserControls.TestControl" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="using:downloader.UserControls" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    mc:Ignorable="d" 
    d:DesignHeight="300" 
    d:DesignWidth="400"> 

    <Grid x:Name="LayoutRootGrid"> 
     <StackPanel Orientation="Vertical"> 
      <TextBlock Text="{Binding TestValue1}"></TextBlock> 
      <TextBlock Text="{Binding TestValue2}"></TextBlock> 
     </StackPanel> 
    </Grid> 
</UserControl> 

И в C# код позади:

//this.DataContext = this; 
LayoutRootGrid.DataContext = this; 

Вероятно потому, что DataContext было переопределяется this ... Поскольку DataContext наследуется от родителя, используя старую строку, он больше не наследуется от своего родителя.

Поэтому я дал внутреннему элементу контекст данных коды, за которым позволили UserControl наследовать DataContext родителя (т.е. от того, где она называется)

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