2015-01-15 34 views
-1

我有一個WPF應用程序,有很多控件的對話框。我有一個沒有從C#綁定到XAML的下拉列表。另一種方式工作正常。雙向綁定不能在WPF中工作

這裏是C#:

public class AdditionalCostView : ViewBase, IEquatable<AdditionalCostView> 
{ 
    // .. 
    public OfficeReferenceDataView Category 
    { 
     get { return _category; } 
     set 
     { 
      this._category = value; 
      this.OnPropertyChanged("Category"); 
     } 
    } 
    // .. 
} 

,這裏是相應的XAML:

<ComboBox Grid.Row="0" Grid.Column="1" Validation.Error="Validation_Error" 
      DisplayMemberPath="Value" SelectedValuePath="ID" 
      ItemsSource="{Binding AllCategories}"> 
    <ComboBox.SelectedItem> 
     <Binding Path="Category" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged"> 
      <Binding.NotifyOnValidationError> 
       <sys:Boolean>true</sys:Boolean> 
      </Binding.NotifyOnValidationError> 
      <Binding.NotifyOnSourceUpdated> 
       <sys:Boolean>true</sys:Boolean> 
      </Binding.NotifyOnSourceUpdated> 
      <Binding.NotifyOnTargetUpdated> 
       <sys:Boolean>true</sys:Boolean> 
      </Binding.NotifyOnTargetUpdated> 
      <Binding.ValidationRules> 
       <validators:MandatoryValueValidationRule IsRequired="True" Message="Please select a category."></validators:MandatoryValueValidationRule> 
      </Binding.ValidationRules> 
     </Binding> 
    </ComboBox.SelectedItem> 
</ComboBox> 

結合工作正常,但結合的SelectedItem的AllCategories是沒有的。 ViewBase實現INotifyPropertyChanged。

當我在C#中的視圖中更改類別的值時,下拉列表中沒有任何反應。

我哪裏錯了?

UPDATE

按要求評論,這裏是我把我的值的代碼:

private void ctlBooking_PricesAndFees_AdditionalCostEditing(object sender, RoutedEventArgs e) 
{ 
    try 
    { 
     AdditionalCostEventArgs args = e as AdditionalCostEventArgs; 
     AdditionalCostView costToEdit = args.AdditionalCost; 
     AdditionalCostView tempCost = args.AdditionalCost.Clone() as AdditionalCostView; 
     // .. 
    } 
    // .. 
} 

我知道你在想什麼,因爲我認爲同樣的事情。 Clone()不是複製值或引發事件,但它是。我在克隆之後慢慢寫了它來顯式設置這些值,但仍然無效。

中號

+1

您可能在「SelectedValuePath」和「SelectedItem」之間存在衝突。你有沒有嘗試刪除「SelectedValuePath」? – BradleyDotNET 2015-01-15 18:35:29

+0

另一方面,你是否真的*變成列表中的一個項目?或者這些屬性匹配? – BradleyDotNET 2015-01-15 18:36:08

+0

您是否在輸出窗口中看到任何綁定錯誤?你在'AllCategories'列表中設置了Category Category表單對象嗎? – 2015-01-15 18:38:06

回答

0

你可以用這個XAML嘗試(不要忘記申報您的數據):

<UserControl.DataContext> <!--<Window.DataContext>--> 
    <data:AdditionalCostView /> 
</UserControl.DataContext> <!--</Window.DataContext>-->  

<ComboBox Grid.Row="0" Grid.Column="1" 
     DisplayMemberPath="Value" SelectedValuePath="ID" 
     ItemsSource="{Binding AllCategories, Mode=TwoWay}" SelectedValue="{Binding Category.ID, Mode=TwoWay" /> 

應用您ValidationRules在你的模型不是在你的UI。搜索關於DataAnnotations:P

+0

我在哪裏把?無論我放在哪裏,都會收到錯誤信息。 – serlingpa 2015-01-15 19:18:27

+0

@serlingpa如果您使用UserControl,則放置UserControl,如果您在那裏使用Window put Window。 :) – 2015-01-15 19:24:01