ItemsControl
에 ItemsSource
이 있고 Paths가 ObservableCollection
입니다. 우리가 우리의 ViewModel에서멀티 바인드가 작동하지 않음 - 경로의 스트로크 두께가 변하지 않았습니다.
private double _strokeThickness;
public double StrokeThickness
{
get { return _strokeThickness; }
set
{
_strokeThickness = value;
OnPropertyChanged(nameof(StrokeThickness));
}
}
:
public ObservableCollection<Path> PathCollection
{
get { return _pathCollection; }
set
{
_pathCollection = value;
OnPropertyChanged(nameof(PathCollection));
}
}
그리고 이것은 내보기입니다 : 나는 Multibinding 사용하고
<!-- Paths -->
<ItemsControl ItemsSource="{Binding PathCollection}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Path Stroke="{Binding Stroke}"
Data="{Binding Data}">
<Path.StrokeThickness>
<MultiBinding Converter="{StaticResource
CorrectStrockThiknessConvertor}">
<MultiBinding.Bindings>
<Binding Source="{Binding
StrokeThickness}"></Binding>
<Binding ElementName="RootLayout"
Path="DataContext.ZoomRatio" >
</Binding>
</MultiBinding.Bindings>
</MultiBinding>
</Path.StrokeThickness>
</Path>
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas x:Name="Canvas"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
INotifyPropertyChanged
을 구현하는 경로 클래스는 StrokeThickness
라는 이름의 속성이 ZoomRatio에 기반한 StrokeThickness. ZoomRatio는지도가 확대 될 때마다 계산됩니다.
이 내 MultiBinding 변환기입니다 :
public class CorrectStrockThiknessConvertor : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
if (values != null & values.Length == 2 && (double)values[0] != 0)
{
return (double)values[1]/(double)values[0];
}
return 1;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
나는이 변환기에게 그 작업 벌금을 추적하지만 StrokeThikness가 동일하고 반환 값은 경로의 StrokeThikness을 변경하지 않습니다 의미 매번 그것을 입력 데이터를 때.
내가 잘못하고있는 것이 있습니까?
'Binding.Source'는 바인딩에 의해 감시 될 객체의 * instance *를 지정합니다. 'Binding.Path'를 지정하지 않으면 그것은 * double *의 인스턴스를 직접 모니터하고 (관찰 가능한 콜렉션에 의해'Path' 인스턴스를 유지하지 않습니다) 이것이 문제입니다. – Sinatr
@Sinatr 그리고 소스에 바인딩이 있습니다.'XamlParseException이 발생합니다. –
Clemens