2013-10-11 6 views
1

사용자가 항목을 선택 취소 할 때까지 목록 상자 선택을 "고정"할 수 있어야합니다.
예제를 찾을 수없고 올바른 방향으로 작은 포인터가 필요할 것 같습니다.
MVVM에 있기 때문에 RelayCommand를 실행하고 SelectedIndex가 -1 일 때만 활성화하려고합니다.선택 항목이 이미 선택되었을 때 ListBox 항목 고정 선택

어떻게하면됩니까?

+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

Ah. 나는 느린 순간을 보내고 있었다. 이걸로 내가 뭘 할 수 있는지 알 겠어. 이것은 매우 간단하고 멋지다. 완전한! 나는 이것이 @ aL3891의 대답에 변환기를 쓰지 못하게한다고 믿는다. – Rachael

2

한 가지 방법은 selectedIndex의에의 IsEnabled 바인딩 데이터를하고 다음 YourConverter가에서 this page

를 참조 작성에 의해 selectedIndex가 true 경우에만 -1 추가 정보를 위해

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

반환하는 컨버터를 가지고 viewmodel SelectedIndex에 대한 속성을 가질 수 있고 -1로 설정하면 목록 상자를 다시 활성화해야합니다.


목록 상자를 완전히 비활성화하지 않으려면 데이터 유효성 검사를 사용하여 일부 조건에서 오류 메시지를 표시 할 수 있습니다. here is a good place to get started

+0

소리가 훌륭합니다. 그렇다면 목록 상자가 활성화되지 않은 상태에서 GetFocus 이벤트에서 여전히 어떤 작업을 수행 할 수 있습니까? 나는 단지 그 경우에 목록 상자의 컨테이너에 대해 그렇게 할 수 있다고 생각한다. (사용자가 선택하려 할 때 이미 선택을했을 때) – Rachael

+0

hm 나는 궁금하다. 만약 당신이 그것을 필요로한다면, 당신은 데이터로 더 나아질 것이다. 확인. wpf 데이터 유효성 검사가 다른 값을 선택할 수 없다는 것을 완전히 확신하지는 않지만 데이터 바인딩을 통해 대신 할 수 있습니다. – aL3891

+0

위와 같이 끝났지 만 이것은 훌륭한 해결책입니다. 대단히 고마워요. 그리고 저는 확실히 변환기 사용에 대해 더 많이 생각하게 만듭니다. – Rachael