2010-03-10 8 views
0

정확하게하고 싶은 것은 user와 userprofile의 2 개의 테이블이 있고 두 필드 모두 거의 동일한 필드가 있다는 것입니다. 이메일 필드의 예를 들어 보겠습니다. 텍스트 상자가 있고 사용자 테이블 전자 메일 필드 값이 표시됩니다. 사용자가 텍스트 상자를 마우스 오른쪽 버튼으로 클릭하면 메뉴에 User 및 UserProfile 전자 메일 필드 값이 모두 표시되도록 상황에 맞는 메뉴가 표시됩니다. - 개발자 1 시간 전
상황에 맞는 메뉴에서 값을 선택하면 텍스트 상자에 해당 값이 표시됩니다. Binding Email1과 Binding Email2를 사용할 수 있습니다. 데이터베이스에서이 두 값을 가져 오는 데 아무런 문제가 없으므로 이에 따라 코드를 변경해야합니다. WPF 및 .NET 프레임 워크 자체가 처음이므로이 작업을 수행하는 방법을 잘 모릅니다. 이번에 나 자신을 분명히했는지 알려주세요. 명령 및 이벤트를 처리하는 방법을 잘 모르겠습니다. 사람이 .. 나에게이 accomalish하는 코드를 보여 당신에게 WPF/MVVM 멍청한 놈의 답을주고 골조지고의 위험에서 미리텍스트 상자의 상황에 맞는 메뉴

+2

이것은 질문이 아닙니다. – Jay

+0

질문에 대한 답변을 얻는 데 어려움을 겪고있는 것처럼 보이므로 요청하는 방법을 변경하는 것이 좋습니다. 다음과 같은 형식을 시도해보십시오 : 전제와 작은 배경으로 시작하십시오. 시도한 코드 블록을 따라 가십시오. 마지막으로 질문하십시오. –

+0

분명히 잘 어울린 "질문"은 아니지만 그가 이메일 주소가 두 개 있다고 생각합니다. 사용자가 상황에 맞는 메뉴에서 "올바른 것"을 선택할 수있게하려고합니다. – Dave

답변

6

에서

<TextBox Style="{StaticResource FieldStyle}" Text="{Binding Email1, UpdateSourceTrigger=PropertyChanged}"> 
          <TextBox.BorderBrush> 
           <MultiBinding Converter="{StaticResource TextBoxBorderConverter}"> 
            <Binding Path="Email1"/> 
            <Binding Path="Email2"/> 
           </MultiBinding> 
          </TextBox.BorderBrush> 
         </TextBox> 

감사합니다 수, 여기에 표시됩니다. 필자는 한번도 해본 적이 없기 때문에 데이터베이스로 데이터 바인딩하는 것에 대해 조언 할 수는 없으므로 XAML을 제공 할 것이며 데이터베이스 작업을 끝내야합니다. 객체에 바인딩 경우에

<Page 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Grid> 
     <TextBox Height="28" Text={Binding PreferredEmail}"> 
     <TextBox.ContextMenu> 
      <ContextMenu> 
      <MenuItem Header="{Binding Email1}" Command="{Binding Email1Command}" /> 
      <MenuItem Header="{Binding Email2}" Command="{Binding Email2Command}" /> 
      </ContextMenu> 
     </TextBox.ContextMenu> 
     </TextBox> 
    </Grid> 
</Page> 

는 PreferredEmail는 이메일 1 및 이메일 2 종속성 속성 또는하여 PropertyChanged 이벤트를 발생 속성에 바인딩한다. 이것은 ViewModel (또는 하위 수준 코드를 호출하려는 것)이 데이터를 업데이트하는 방법입니다. 코드 숨김에서 값을 변경하면 궁극적으로 컨텍스트 메뉴에 자동으로 반영됩니다. 그런 다음 PreferredEmail의 설정을 처리하기 위해 두 개의 ICommand 기반 클래스를 구현해야합니다.

나는 두 개의 명령 핸들러를 구현하는 것이 절름발이이며 더 많은 이메일 소스를 추가해야하는 경우에는 잘 확장되지 않을 것이라고 생각한다. 더 나은 해결책은 하나의 명령 핸들러와 선택된 MenuItem 헤더 인 CommandParameter를 사용하는 것이지만, 어떻게해야할지 모르겠다. 그러나 어떤 경우 든 바인드중인 경우 두 명령 처리기 솔루션이 계속 작동합니다.

+0

나는 정말로 질문을 정확하게 골라 내지 못해서 죄송합니다. 나는 WPF에 익숙하지 않아 필요한 기술적 인 세부 사항에 대한 사명을 다할 수도 있습니다. 정확하게하고 싶은 것은 user와 userprofile의 2 개의 테이블이 있고 그것들 모두 거의 동일한 필드를 가지고 있다는 것입니다. 이메일 필드의 예를 들어 보겠습니다. 텍스트 상자가 있고 사용자 테이블 전자 메일 필드 값이 텍스트 상자에 표시됩니다. 사용자가 텍스트 상자를 마우스 오른쪽 버튼으로 클릭하면 메뉴에 User 및 UserProfile 전자 메일 필드 값이 모두 표시되도록 상황에 맞는 메뉴가 표시됩니다. – developer

+0

.. 계속 ... 상황에 맞는 메뉴에서 값을 선택하면 텍스트 상자에 해당 값이 표시됩니다. Binding Email1과 Binding Email2를 사용할 수 있습니다. 데이터베이스에서이 두 값을 가져 오는 데 아무런 문제가 없으므로 이에 따라 코드를 변경해야합니다. WPF 및 .NET 프레임 워크에 익숙하지 않아이를 달성하는 방법을 모르겠습니다. 이번에 내가 스스로를 명확히했는지 알려주세요. – developer

+0

위의 코드에서 Dave를 게시하면 헤더가 컨텍스트 메뉴에 대한 email1 값을 제공하지만 Command = "{Binding Email1Command}"는 어떻게됩니까? 나는 아이디어가 없다. 사용자가 그것을 선택할 때 email1이나 email2 값이 텍스트 박스에서 표시되도록 코드를 작성하는 법. – developer

관련 문제