2016-11-09 181 views
0

我在代碼中創建了一個類的實例,並將名爲「Name」的類的屬性之一綁定到文本框,但綁定不起作用。 你能幫助我嗎? 後面的代碼:xaml中的綁定錯誤

public partial class BlackOilWindow : FluidsWindowClass 
    { 
     public Classes.ModelInOutClasses.BlackOilFluidModel _FluidBlackOilClass; 
     public BlackOilWindow(Classes.ModelInOutClasses.BlackOilFluidModel inputBlackOilClass):base(inputBlackOilClass) 
     { 
      if (inputBlackOilClass == null) 
      { 
       inputBlackOilClass = new ModelInOutClasses.BlackOilFluidModel(); 
      } 
      _FluidBlackOilClass = inputBlackOilClass; 
      InitializeComponent(); 



     } 
    } 

的XAML:

<TextBox 
    HorizontalAlignment="Left" 
    Height="23" 
    Margin="73,7,0,0" 
    TextWrapping="Wrap" 
    VerticalAlignment="Top" 
    Width="120" 
    Text="{Binding ElementName=_FluidBlackOilClass, Path=Name, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" 
    /> 
+1

_FluidBlackOilClass必須是一個屬性,而不是一個構件 –

+0

的可能的複製[WPF:簡單文本框數據綁定](http://stackoverflow.com/questions/1725554/wpf-simple-textbox-data-binding) – Sinatr

回答

1

兩個問題。首先,它必須是一個屬性(並採取強調關閉前,如果它是公開的;按照慣例,下劃線前綴表示「私人領域」):

public Classes.ModelInOutClasses.BlackOilFluidModel FluidBlackOilClass { 
    get; set; 
} 

其次,默認情況下,Binding將查找DataContext對象上指定的屬性。據我所知,你說的話,WindowDataContextnullElementName用於指代具有x:Name屬性的UI控件控件FluidBlackOilClass是不是。和(瑣事時間!)Mode在這種情況下是不需要的;該控件的屬性具有默認值,TwoWayTextBox.Text的默認值。

因此,無論您的綁定是否無效,無論FluidBlackOilClass是字段還是屬性。 FluidBlackOilClass是該窗口的一個屬性。以下是如何綁定到窗口的屬性(或者在這種情況下,屬於窗口的性質的性質 - 同樣的差異,不同的Path):

<TextBox 
    HorizontalAlignment="Left" 
    Height="23" 
    Margin="73,7,0,0" 
    TextWrapping="Wrap" 
    VerticalAlignment="Top" 
    Width="120" 
    Text="{Binding FluidBlackOilClass.Name, RelativeSource={RelativeSource AncestorType=Window}, UpdateSourceTrigger=PropertyChanged}" 
    />  

你會用更好適當的視圖模型,實現INotifyPropertyChanged。您應該而不是實施INotifyPropertyChangedWindow,the accepted answer to this duplicate建議。起初這似乎是任意的,但你很快就會發現分離使你的代碼更容易處理。

+0

非常很感謝。它工作得很好。 – ali

0

您使用的類的成員具有約束力。綁定僅適用於「屬性」。快速更正是這樣的:

public Classes.ModelInOutClasses.BlackOilFluidModel _FluidBlackOilClass{get;set;} 

根據您的要求調整解決方案。