2010-12-01 3 views
0

(InitializeComponents()만을 호출하는 기본 생성자를 통해) 인스턴스화 된 다음 작은 , 특히 ViewModel의 인스턴스를 제공하는 작은 사용자 정의 ValueConverter을 시험해보고 싶습니다. 모든 (A NullReferenceException를 산출)에서 DataContext 그 이후 변경 되었기 때문에, 작동하지 않습니다 Binding 내에서 StaticResource를 사용DataContext 스위치 뒤에 ValueConverter 사용

(더 이상 this하지 않습니다).

InitializeComponents 전화 전에 변경 전의 DataContext = this;을 넣으려고했습니다. 변경 사항이 없습니다. MarkupExtension 기즈모 (in this article에 설명 된 내용)를 조사해야합니까?

ViewModel (현재 DataContext) 내에 맞춤 Value Converter의 인스턴스를 만들려고했는데 도움이되지 않습니다.

나는 항상 추가 세부 정보를 제공 할 수 있습니다. 미리 감사드립니다.

TextBlock 내에 ContextMenu를 표시하려고합니다. ContextMenu는 하나의 MenuItem을 포함합니다. 예를 들어, MenuItem의 머리글은 "설정"일 수 있습니다. 해당 MenuItem의 Children (MenuItems로 렌더링 됨)은 Enum에서 파생되므로 MenuItem의 ItemsSource입니다.

이제는 기본 설정이 있으므로 모든 항목이 멋지게 표시되지만 자녀 (예 : 열거 형의 구성원) 중 하나를 기본값으로 선택하려고합니다. 배경 정보는 my other question에서 확인할 수 있습니다.

편집는 :

... 
<UserControl.Resources> 
    <Helpers:DisplayTypeToDefaultValueConverter x:Key="displayTypeConverter" /> 
</UserControl.Resources> 
... 

<TextBlock x:Name="InstructionLabel" 
      TextWrapping="Wrap" Text="{Binding Path=SelectedNodeText}" 
      Grid.RowSpan="1"> 

    <TextBlock.ContextMenu> 
    <ContextMenu> 
     <MenuItem Header="Settings" Name="SettingsPop" 
       DataContext="{Binding}" 
       ItemsSource="{Binding Source={StaticResource DisplayTypeValues}}" 
       IsCheckable="True" 
       Click="SettingsType_Click"> 

     <MenuItem.ItemContainerStyle> 
      <Style TargetType="MenuItem"> 
      <Setter Property="Header" Value="{Binding}"/> 
      <Setter Property="IsChecked"> 
       <Setter.Value> 
       <Binding Converter="{StaticResource displayTypeConverter}" /> 
       </Setter.Value> 
      </Setter> 
      </Style> 
     </MenuItem.ItemContainerStyle> 

    </ContextMenu> 
    </TextBlock> 

난 단지 지금은 지칠대로 지친의 ContextMenu의 것을 깨달았다. 그게 문제 야, 맞지?

+1

1. DataContext는 StaticResource 바인딩에 영향을 미치지 않습니다. 2. 당신이 구속력이있는 xaml 라인을 제공해 줄 수 있습니까? –

+0

수정 작업 중입니다. – Dr1Ku

+0

DisplayTypeValues는 어디에 있습니까? 정의를 볼 수 없습니다.그리고 DisplayTypeToDefaultValueConverter의 코드도 도움이 될 것입니다. –

답변

0

그냥 몇 가지 생각 :

  1. 당신이 <Binding Converter="{StaticResource displayTypeConverter}" />에 바인딩 경로를 설정 놓치지 않았다 확실?
  2. Throw 예외의 StackTrace를 확인하고 InnerExceptions를보고 재미있는 것이 있는지 여부를 확인 했습니까?
+0

"IsChecked"가되어야 경로가 누락 된 것 같습니다. 예외는 "WPF Data Binding"디버그 레벨이 VS Preferences에서 더 높게 설정되어 우스운 MessageBox 내에 표시됩니다. – Dr1Ku

+0

@ Dr1Ku : 올바르게 이해하면 예외 대화 상자 하단의 "세부 정보보기 ..."링크를 눌러 예외에 대한 세부 정보를 볼 수 있습니다. 더 이상 생각이 없습니다. –

1

ItemContainerStyle 내의 DataContext는 DisplayTypeValues ​​컬렉션의 멤버입니다. UserControl을 변경하는 DataContext의 영향을받는 XAML에서 유일한 것은 InstructionLabel의 텍스트입니다. 값을 이미 부모 ContextMenu에서 상속하므로 MenuItem에서 수행중인 DataContext = "{Binding}"설정도 중복됩니다.

DataContext에서 기대하는 바가 무엇인지, 또는 무엇을하려고하는지 명확하지 않습니다.

+0

입력 해 주셔서 감사합니다. ContextMenu (마우스 오른쪽 버튼으로 클릭 가능)를 TextBlock 내에 표시하려고합니다. ContextMenu는 MenuItem으로 구성되며, (자식) MenuItem은 Enum에서 해당 값을 가져옵니다. 내가 성취하려고하는 것은 디폴트로 (자식) MenuItem의 한 항목을 검사하도록하는 것입니다. – Dr1Ku