ItemsControl
にはItemsSource
があり、パスは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));
}
}
そして、これが私のビューである:私は多使用している
<!-- 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
を実装Pathクラスは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'は、バインディングによって監視されるオブジェクトの*インスタンス*を指定します。 'Binding.Path'を指定せずに、* double *のインスタンスを直接監視します(監視可能なコレクションによって保持された' Path'インスタンスではない)。これが問題です。 – Sinatr
@Sinatrそして、ソースにバインドされている、 ''はXamlParseExceptionになります。 –
Clemens