Я просто хочу, чтобы использовать MultiBinding
для WrapPanel
«s ItemHeight
& ItemWidth
. Код выглядит следующим образом:WrapPanel ItemWidth & ItemHeight MultiBinding
<Window.Resources>
<local:SensorHeightCalculator x:Key="HeightCalculator"/>
<local:SensorWidthCalculator x:Key="WidthCalculator"/>
</Window.Resources>
<Border x:Name="sensorPanelBorder" BorderBrush="#FFD5DFE5" BorderThickness="1" Grid.Column="2" Margin="0,9,2,2" CornerRadius="3">
<ListView x:Name="sensorPanel" Margin="0" ItemsSource="{Binding Source={StaticResource SensorControls}}">
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel x:Name="sensorWrapPanel" IsItemsHost="True">
<WrapPanel.ItemHeight>
<MultiBinding Converter="{StaticResource HeightCalculator}" UpdateSourceTrigger="PropertyChanged">
<Binding ElementName="sensorPanelBorder" Path="ActualHeight"/>
<Binding ElementName="sensorPanelBorder" Path="ActualWidth"/>
<Binding ElementName="sensorPanel" Path="Items.Count"/>
</MultiBinding>
</WrapPanel.ItemHeight>
</WrapPanel>
</ItemsPanelTemplate>
</ListView.ItemsPanel>
</ListView>
</Border>
Но он выдает исключения и не отображает. Я также пытался сделать это в коде, но это тоже не сработало.
Реальная проблема заключается в том, что мне нужно, чтобы связать пункты WrapPanel
к CollectionViewSource
, и поэтому, как я прочитал в Интернете, я должен использовать WrapPanel
внутри ListView
(как выше). До этого я заполнил WrapPanel
вручную, у меня был метод, который я использовал для вычисления ItemHeight
и ItemWidth
WrapPanel
и назначил ему это. Но теперь, когда WrapPanel
находится внутри ListView
, он недоступен в кодировке и, следовательно, я решил использовать Multibinding
.
Источник SensorHeightCalculator:
public class SensorHeightCalculator : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
double H = (double)values[0];
double W = (double)values[1];
double N = (double)values[2];
if (N > 0)
{
double k = 7.0/6.0;
double c = N;
double r = 1;
double ah, aw, a, b;
do
{
aw = (W - 2)/c;
ah = k * aw;
if (Math.Floor(H/ah) <= r) break;
else
{
r++;
c = c - Math.Floor(c/r);
}
} while (r <= N);
a = Math.Min(aw, H/(k * r));
b = k * a;
return b - 10;
}
else
return 300;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
return default(object[]);
}
}
Исключение и полный стек след, что:
Исключение: InvalidCastException: Указанный литая не является действительным.
Стек трассировки:
в AvaPa.SensorHeightCalculator.Convert (Object [] значения, тип TargetType, параметр объекта, CultureInfo культуры) в System.Windows.Data.MultiBindingExpression.TransferValue() в System.Windows .Data.MultiBindingExpression.Transfer() в System.Windows.Data.MultiBindingExpression.UpdateTarget (Boolean) includeInnerBindings в System.Windows.Data.MultiBindingExpression.AttachToContext (Boolean) LastChance в System.Windows.Data.MultiBindingExpression.AttachOverride (DependencyObject d, DependencyProperty dp) в System.Windows.Data.BindingExpressionBase .OnAttach (DependencyObject д, DependencyProperty др) на System.Windows.StyleHelper.GetInstanceValue (UncommonField 1 dataField, DependencyObject container, FrameworkElement feChild, FrameworkContentElement fceChild, Int32 childIndex, DependencyProperty dp, Int32 i, EffectiveValueEntry& entry) at System.Windows.StyleHelper.GetChildValueHelper(UncommonField
1 DataField, ItemStructList 1& valueLookupList, DependencyProperty dp, DependencyObject container, FrameworkObject child, Int32 childIndex, Boolean styleLookup, EffectiveValueEntry& entry, ValueLookupType& sourceType, FrameworkElementFactory templateRoot) at System.Windows.StyleHelper.GetChildValue(UncommonField
1 DataField, DependencyObject контейнер, Int32 childIndex, FrameworkObject ребенок, DependencyProperty дп, FrugalStructList childRecordFromChildIndex, FrameworkElementFactory templateRoot, EffectiveValueEntry & запись) на System.Windows.StyleHelper.ApplyTemplatedParentValue (DependencyObject контейнера, FrameworkObject ребенка, Int32 childIndex, FrugalStructList childRecordFromChildIndex, булева isDetach, FrameworkElementFactory templateRoot) на System.Windows.FrameworkTemplate.InvalidatePropertiesOnTemplate (DependencyObject контейнер, объект с urrentObject) в System.Windows.FrameworkTemplate.HandleBeforeProperties (Object createdObject, DependencyObject & rootObject, контейнер DependencyObject, FrameworkElement feContainer, имя INameScopeScope) в System.Windows.FrameworkTemplate. <> c__DisplayClass45_0.b__2 (отправитель объекта, XamlObjectEventArgs арг) в System.Xaml.XamlObjectWriter.OnBeforeProperties (значение объекта) в System.Xaml.XamlObjectWriter.Logic_CreateAndAssignToParentStart (ObjectWriterContext СТХ) в System.Xaml.XamlObjectWriter.WriteStartMember (свойство XamlMember) в System.Xaml.XamlWriter.WriteNode (считыватель XamlReader) в System.Windows.FrameworkTemplate.LoadTemplateXaml (XamlReader templateReader, XamlObjectWriter currentWriter)
Заранее спасибо за помощь
«Но он выбрасывает исключения» - то, что исключение? Рекомендуемое чтение - http://meta.stackoverflow.com/questions/260648/stack-overflow-question-checklist. –
Это исключение, но я думаю, что это действительно не помогает: InvalidCastException: Указанный приказ недействителен. – Amir
Пожалуйста, прочитайте http://meta.stackoverflow.com/questions/260648/stack-overflow-question-checklist%E2%80%8C%E2%80%8B, затем добавьте полную трассировку стека этого исключения в свой вопрос (не как комментарий). Кроме того, это исключение, вероятно, происходит в 'local: SensorHeightCalculator', поэтому его исходный код также должен быть добавлен. –