2010-06-01 136 views
0

我已经有了一些绑定在UI:WPF绑定问题

<Window x:Class="Tester.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="377" Width="562" xmlns:my="clr-namespace:MyApp"> 
     <Grid> 
     <TextBlock Text="{Binding Path=current.Text}" Name="Text1" /> 
     <TextBlock Text="{Binding Path=current.o.Text}" Name="Text2" /> 

</Grid> 
</Window> 

代码:

class Coordinator : INotifyPropertyChanged{ 
    List<Myclass1> list; 
    int currId = 0; 
    public Myclass1 current{ 
       return list[currId]; 
      } 
    public int CurrId 
    { 
     get { return currId; } 
     set 
     { 
       currId = value; 
       this.PropertyChanged(this,new PropertyChangedEventArgs("current")); 


     } 
} 
class Myclass1{ 
    public string Text{get;} 
    public Myclass2 o{get;} 
} 

class Myclass2{ 
    public string Text{get;} 
} 

当currId在UI改变Tex1也发生了变化,但文本2没有。

我假设这是因为Text2的来源没有更新。 有谁知道如何解决它?

回答

0

它应该工作,假设你正确地实施你的课程。随着一些修正我的代码看起来是这样的:

<Window x:Class="WpfBindingTest.Window1" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
Title="Window1" Height="300" Width="300"> 
<Grid> 
    <StackPanel> 
     <TextBlock Text="Enter 0, 1 or 2 below and press Tab:"/> 
     <TextBox Text="{Binding CurrId}"/> 
     <Button/> <!--Button here is just for another tab stop--> 
     <TextBlock Text="{Binding Path=current.Text}" Name="Text1" /> 
     <TextBlock Text="{Binding Path=current.o.Text}" Name="Text2" /> 
    </StackPanel> 
</Grid> 
</Window> 

它工作得很好,像这样实现的类:

public partial class Window1: Window { 
    public Window1() { 
     InitializeComponent(); 
     DataContext = new Coordinator(); 
    } 
} 

class Coordinator: INotifyPropertyChanged { 
    List<Myclass1> list; 
    int currId = 0; 

    public Myclass1 current { 
     get { return list[currId]; } 
    } 

    public int CurrId { 
     get { return currId; } 
     set { 
      currId = value; 
      this.PropertyChanged(this, new PropertyChangedEventArgs("current")); 
     } 
    } 

    public Coordinator() { 
     list = new List<Myclass1>(){ 
      new Myclass1(){ Text = "1", o = new Myclass2(){Text="1.1"}}, 
      new Myclass1(){ Text = "2", o = new Myclass2(){Text="2.2"}}, 
      new Myclass1(){ Text = "3", o = new Myclass2(){Text="3.3"}} 
     }; 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 
} 

class Myclass1 { 
    public string Text { get; set; } 
    public Myclass2 o { get; set; } 
} 

class Myclass2 { 
    public string Text { get; set; } 
} 
0

也许你需要在Myclass2来执行INotifyPropertyChanged也。

+0

为什么不尝试呢?它按原样运行,问题在其他地方。 – 2010-06-03 22:08:51