2010-06-01 181 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