2014-03-19 138 views
0

本質上,我想使用組合框作爲選擇要查看的項目的方式,而不是更新當前正在查看的項目。有沒有可能使用綁定而不是代碼來做到這一點?如何使wpf組合框不更新項目中的項目

下面是我在視圖代碼:

<ComboBox DisplayMemberPath="CustomerId" SelectedValuePath="CustomerId" 
SelectedValue="{Binding Path=CustomerId}" ItemsSource="{Binding Mode=OneWay}" 
IsSynchronizedWithCurrentItem="True"/> 

它會顯示下一個成員,我從下拉框中選擇,但它也將覆蓋從我切換了客戶的前值。

(另外,我對任何可憐的禮儀道歉,這是我在這裏的第一篇文章)

編輯:爲了澄清,該窗口的層次結構如下所示:包含文本框格柵和組合框和具有約束力。文本框綁定到「客戶」類的各種屬性,然後組合框設置選定的客戶。

所以這樣的:

<Grid DataContext = "{Binding Customers}"> 
    <TextBox .../> 
    ... 
    <ComboBox (see code above)/> 
</Grid> 

回答

0

要回答我自己的問題在這一個,哦。

爲了解決這個問題,我用這對我的代碼:

 <ComboBox 
      DisplayMemberPath="CustomerId" 
      SelectedValuePath="CustomerId" 
      SelectedValue="{Binding Path=CustomerId, Mode=OneWay, UpdateSourceTrigger=Explicit}" 
      ItemsSource="{Binding Mode=OneWay}" 
      IsSynchronizedWithCurrentItem="True"/> 

如果我不指定將選擇值的結合,是一個雙向綁定,它就會更新源。我認爲項目源中的單向綁定應該爲我做到這一點,但顯然情況並非如此。

0

試試這個

<ComboBox DisplayMemberPath="CustomerId" SelectedValuePath="CustomerId" 
SelectedValue="{Binding Path=CustomerId, UpdateSourceTrigger=Explicit}" ItemsSource="{Binding Mode=OneWay}" 
IsSynchronizedWithCurrentItem="False"/> 

所以,你必須明確地更新您的SelectedValue屬性中的代碼更新。

+0

當我改變選擇,它仍然改變對象的值。我甚至嘗試添加UpdateSourceTrigger = Explicit到itemsSource綁定,這似乎也沒有幫助。 – Taugenichts

+0

在xaml中使用IsSynchronizedWithCurrentItem =「False」。 我已經更新了我的答案。 – Ahmed

+0

然後它不會將網格的其餘部分同步到所選項目。它不會更新項目,但它也不會更改綁定。 我更新了我的原稿以顯示它的工作原理。 – Taugenichts