2014-10-24 4 views
0

xaml 뷰가로드 될 때 실행되는 항목 컨트롤의 항목을 변환하는 WPF 값 변환기가 있습니다.ValueConverter는 한 번만 실행됩니다.

제 문제는 itemssource 컬렉션이 알림 속성 변경 이벤트를 발생시킬 때 값 변환기가 실행되지 않는 것입니다.

<Button Name="btnDraw" Command="{Binding StackupViewModel.ScrollCommand}" /> 

private void ScrollCommandHandler(object offset) 
{ 
    RaisePropertyChanged(() => this.Layers); 

} 
: 여기
<ItemsControl ItemsSource="{Binding StackupViewModel.Layers}"> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <ContentPresenter> 
       <ContentPresenter.Content> 
        <MultiBinding Converter="{StaticResource LayerToRectangle}"> 
         <Binding /> 
         <Binding ElementName="rgv"/> 
        </MultiBinding> 
       </ContentPresenter.Content> 
      </ContentPresenter> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 

내가 그래서 레이어 관찰 컬렉션 notifypropertychanged을 발사하기 위해 XAML에 버튼을 추가

public object Convert(
     object[] values, 
     Type targetType, 
     object parameter, 
     System.Globalization.CultureInfo culture) 
    { 
     var layer = values.First() as Layer; 
     var radGridView = values[1] as RadGridView; 
     var column = radGridView.Columns["Lamination"]; 
     var row = radGridView.Items[0]; 
     var cellToEdit = new GridViewCellInfo(row, column, radGridView); 
     radGridView.CurrentCellInfo = cellToEdit; 
     radGridView.Focus(); 

     Rectangle rectangle = new Rectangle(); 

     if (radGridView.CurrentCell != null) 
     { 
      Point p = radGridView.CurrentCell.TranslatePoint(new Point(0, 0), radGridView); 
      rectangle.Height = radGridView.RowHeight - 10; 
      rectangle.Width = column.ActualWidth; 
      rectangle.Fill = (SolidColorBrush)new BrushConverter().ConvertFrom(layer.ColorHex); 
      Canvas.SetTop(rectangle, p.Y + layer.LayerNumber); 
      Canvas.SetLeft(rectangle, p.X); 
     } 





     return rectangle; 
    } 

내 변환기입니다 : 여기

내 XAML입니다

버튼을 클릭 할 때 변환기가 실행되지 않는 이유는 누구에게도 알 수 있습니까? 에드? 당신이 당신의 ScrollCommandHandler 방법을 호출 할 때 MultiBinding 어떤 PropertyChanged를 등록하지 않도록

답변

0

첫 번째 바인딩의 컨텍스트는 개인 Layer 객체가 아닌 Layers 부모 모음입니다.

+0

itemscontrol이 itemschanger가 해당 바인딩을 새로 고치기 위해 propertychanged을 발생시키는 레이어 관찰 가능 컬렉션에 바인딩되어 있으므로 컬렉션에 다시 커버 러를 다시 적용했기 때문에 나는 생각 했습니까? 버튼을 클릭했을 때 컨버터를 refire하는 방법에 대해 조언 할 수 있습니까? – user589195

+0

해킹처럼 느껴지 겠지만, 실제 컬렉션에 '수신 대기'하는 바인딩을 추가 할 수 있습니다 (예 :'Binding ElementName = "MyItemsControl"Path = "ItemsSource"/>'). – Jerrington