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
를 등록하지 않도록
itemscontrol이 itemschanger가 해당 바인딩을 새로 고치기 위해 propertychanged을 발생시키는 레이어 관찰 가능 컬렉션에 바인딩되어 있으므로 컬렉션에 다시 커버 러를 다시 적용했기 때문에 나는 생각 했습니까? 버튼을 클릭했을 때 컨버터를 refire하는 방법에 대해 조언 할 수 있습니까? – user589195
해킹처럼 느껴지 겠지만, 실제 컬렉션에 '수신 대기'하는 바인딩을 추가 할 수 있습니다 (예 :'Binding ElementName = "MyItemsControl"Path = "ItemsSource"/>'). –
Jerrington