2013-06-05 84 views
0

我在使用ComboBox中的綁定時遇到了問題。綁定不適用於繼承屬性

<ComboBox 
      Margin="2" 
      x:Name="itemSelector" 
      SelectionChanged="itemSelector_SelectionChanged"> 
      <ComboBox.ItemTemplate> 
       <DataTemplate> 
        <TextBlock Text="{Binding Id}"/> 
       </DataTemplate> 
      </ComboBox.ItemTemplate> 
     </ComboBox> 

我的對象是public class MyButton : MyElement,並且在MyElement類中設置了Id屬性。

當然,Id是一個公共屬性:public string Id;。 當我嘗試訪問屬於MyButton類的屬性時,它可以工作,但是使用「Id」字段,我什麼也沒有...

+1

'公共字符串Id;'是一個*字段*,而不是*屬性*(這兩個屬性與*屬性*非常不同)。你不能綁定到字段。 '公共字符串Id {get;設置;}'是一個屬性。 – Jon

回答

1

您無法綁定到字段;您需要改爲使Id屬性。

public string Id { get; set; }

1

更換你的領域應該是產權(含getter和setter),沒有現場。因爲你應該通知該屬性的值更改UI(和你應該實現INotifyPropertyChanged接口)

代碼shold看起來像C#5

public string Id 
{ 
    get { return _id; } 
    set { SetProperty(ref _id, value); } 
} 
private string _id; 

或C#4

public string Id 
{ 
     get { return _id; } 
     set 
     { 
      _id = value; 
      RaisePropertyChanged(() => Id); 
     } 
} 
private DateTime _id; 

您可以看到完整的代碼,例如在這個博客文章(4和5版本的C#語言)http://jesseliberty.com/2012/06/28/c-5making-inotifypropertychanged-easier/

(請注意,C#5需要.net 4.5,因此您的應用程序將無法運行在WinXP。C#4需要.Net4.0所以它有不是這個限制。)