2013-10-11 248 views
1

我需要能夠「凍結」列表框選擇,直到我清除用戶選擇的項目。
我似乎無法找到任何示例,並需要在正確的方向一個小指針。
我在MVVM中,所以我可能想要觸發一個RelayCommand,並且只在SelectedIndex爲-1時啓用它。已凍結選擇列表框項目

我該怎麼做?

+0

您的意思是防止用戶選擇其他內容或阻止用戶使用列表框所有? (灰掉) – aL3891

+0

阻止用戶選擇其他內容。可能會拋出一個消息框或一些東西,這樣用戶可以被指示按下刷新按鈕來清除選擇並且再次改變選擇。 – Rachael

回答

2

你可以嘗試使用啓用歡迎使用屬性,如:

<Listbox Enabled=False /> 

如果你願意,你可以在你的代碼bingint這個屬性與另一個。

Property IsListBoxEnable As Boolean 
<Listbox Enabled="{Binding IsListBoxEnable, Mode=TwoWay}" /> 

並且在您的代碼中,您只需修改IsLisBoxEnable的值。要做到這一點

+0

這是一個好主意。但是在MVVM中這樣做(不會太亂),我還需要重新啓用它。我想在這種情況下我需要處理一個命令? – Rachael

+0

我不知道我是否理解你說的,但要重新啓用,如果你已經做了綁定,你只需要設置 'IsListBoxEnable = true' – Alexandre

+0

啊。我的時間很慢。我看到我能在這裏做什麼。這很簡單,很好。完善!我相信這可以防止我不得不在上面的@ aL3891的答案中寫入轉換器? – Rachael

2

一種方法是綁定的IsEnabled到SelectedIndex的數據,然後有一個返回true只有SelectedIndex的是-1

<Listbox IsEnabled={Binding RelativeSource={RelativeSource Self}, 
        Path=SelectedIndex, Converter=YourConverter} /> 

欲瞭解更多信息編寫YourConverter看到this page

在轉換器你viewmodel你可以有一個屬性爲SelectedIndex,然後將其設置爲-1,並且應該再次啓用列表框


如果您不想完全禁用列表框,則可以使用datavalidation在某些情況下顯示錯誤消息,here is a good place to get started

+0

這聽起來不錯。那麼當列表框未啓用時,我仍然可以在事件GetFocus上做些什麼?我想我可以在這種情況下爲列表框的容器做這件事(當用戶試圖選擇,但他們已經做出選擇) – Rachael

+0

嗯我想知道..如果你需要這樣做,你可能會更好的數據驗證。我不完全確定wpf數據驗證可以阻止您選擇其他值,但是您可以通過數據綁定來實現。 – aL3891

+0

我結束了上述工作,但這是一個很好的解決方案。非常感謝,它肯定讓我考慮更多地使用轉換器。 – Rachael