的SelectedValue我有試圖綁定在一個WinRT中的ComboBox
問題。我正在使用Prism/MVVM。我能夠在ItemsSource
到ObservableCollection
綁定沒有問題,並且正在填充ComboBox
。數據綁定組合框在WinRT的棱鏡/ MVVM
我無法用什麼,是有自動選擇基於當前Invoice
適當的值。下面是相關XAML:
<ComboBox Grid.Row="0" Grid.Column="1" Height="30"
ItemsSource="{Binding Path=Payees}"
DisplayMemberPath="AccountName"
SelectedValuePath="PayeeId"
SelectedValue="{Binding CurrentInvoice.PayeeId, Mode=TwoWay}"
Margin="5,0,10,0" />
Payees
是我ObservableCollection
和CurrentInvoice
是指向當前加載Invoice
項目上ViewModel
的屬性。該Invoice
有一個名爲PayeeId
屬性,正如你可能已經猜到,是Payee
的Id
,這Invoice
關聯到。
由於某種原因,無論我選擇哪個Invoice
,當導航到我的頁面時,ComboBox
都是空白的。空白,我的意思是沒有選擇任何東西,但它是由Payees
集合填充的。
如果我手動更改的選擇,並保存我的Invoice
,該PayeeId
沒有改變。我認爲這可能與SelectedValue
上的綁定有關,但到目前爲止,我一直無法找出這個問題。預先感謝任何幫助!
這裏是爲Payees
和CurrentInvoice
屬性:
private Invoice _currentInvoice;
public Invoice CurrentInvoice {
get { return _currentInvoice; }
set { SetProperty(ref _currentInvoice, value); }
}
private ObservableCollection<Payee> _payees;
public ObservableCollection<Payee> Payees
{
get { return _payees; }
set { SetProperty(ref _payees, value); }
}
編輯:
我加入了名爲SelectedPayee
的ViewModel
綁定到ComboBox
的SelectedItem
屬性的屬性。以下是更新的定義:
<ComboBox Grid.Row="0" Grid.Column="1" Height="30"
ItemsSource="{Binding Path=Payees}"
DisplayMemberPath="AccountName"
SelectedValuePath="Id"
SelectedItem="{Binding Path=SelectedPayee, Mode=TwoWay}"
Margin="5,0,10,0" />
當我選擇一個Payee
並保存,它與新PayeeId
撲救,但是當我加載的頁面仍然沒有與在ComboBox
顯示SelectedPayee
加載。但是,設計師一切都很好。爲了進一步測試,我已經添加綁定到一個SelectedPayee.Id
TextBox
:
<TextBox Grid.Row="7" Grid.Column="1" Text="{Binding Path=SelectedPayee.Id}" />
這顯示在設計時和運行時正確的號碼,每當我更改ComboBox
選擇適當更新。這不能正常工作的唯一的事情就是ComboBox
顯示不正確的Payee
AccountName
當我瀏覽的網頁。正如我所說的,設計視圖正確顯示了我在設計師ViewModel
中的虛擬數據。對於ComboBox
有什麼特別之處,我可能是按錯誤的順序做了些什麼?
編輯2:
我也正在逐漸使用
SelectedValue={Binding Path=SelectedPayee.Id, Mode=TwoWay}
完全相同的結果的結合正在顯示在TextBox
正確Payee.Id
取決於哪個Payee
在ComboBox
被選擇,但它只是在我第一次導航到頁面時不顯示SelectedPayee
(但TextBox
將填充正確的Id
。)這實際上是一個頭部劃痕她給我....
編輯3:
我把一切都理順了。最後一個問題是我在設置SelectedPayee
之前實際加載了ComboBox
,因此沒有屬性更改來觸發ComboBox
的SelectedValue
發生更改。一旦我將呼叫轉移到LoadPayees()
以上的任務SelectedValue
,一切都像一個魅力。 請參閱下面的答案。
我不知道這個組件到底如何工作的,但通常在組合框中選擇指指數,而不是具體值。此外,如果您嘗試將selectedValue硬編碼到組合框中,它是否按預期工作? – libik 2015-03-02 21:42:52
在ComboBox上有'SelectedIndex'和'SelectedValue'屬性。 「SelectedValue」應該是XAML中顯示的「PayeeId」,而不是項目的索引。 – 2015-03-02 21:47:13
嗯,'SelectedValue =「{綁定路徑= CurrentInvoice.PayeeId,Mode = TwoWay}」' – libik 2015-03-02 21:51:26