Попробуйте указать имя в ListBox и перечислите его DataContext в привязке:
<ListBox x:Name="myList" ItemsSource="{DynamicResource MyColl}">
<ListBox.Resources>
<CompositeCollection x:Key="MyColl">
<CollectionContainer Collection="{Binding DataContext.Dogs, Source={x:Reference myList}}"/>
<CollectionContainer Collection="{Binding DataContext.Cats, Source={x:Reference myList}}"/>
</CompositeCollection>
</ListBox.Resources>
</ListBox>
Почему вам нужно злоупотреблять другими классами, а не реализовывать что-то чрезвычайно простое:
public class Dimensions {
public int width;
public int height;
public Dimensions() {}
public Dimensions(int w, int h) {
width = w;
height = h;
}
public Dimensions(Dimensions p) {
this.width = p.width;
this.height = p.height;
}
public final void set(int w, int h) {
width = w;
height = h;
}
public final void set(Dimensions d) {
this.width = d.width;
this.height = d.height;
}
public final boolean equals(int w, int h) {
return this.width == w && this.height == h;
}
public final boolean equals(Object o) {
return o instanceof Dimensions && (o == this || equals(((Dimensions)o).width, ((Dimensions)o).height));
}
}
Вы можете использовать Pair<Integer, Integer>
, который является общим классом кортежей Android. (Однако вам нужно будет заменить getWidth()
и getHeight()
на first
и second
.) В других местах Android API команда Android, похоже, использует для этого специальные классы, например Camera.Size
.
Вы можете выбрать один из следующих вариантов:
android.util.Size
(с API 21). Он имеет getWidth()
и getHeight()
, но он неизменен, а значит, после его создания вы не можете его изменить. android.graphics.Rect
. Он имеет getWidth()
и getHeight()
, но они основаны на внутренних left
, top
, right
, bottom
и могут казаться раздутыми со всеми его дополнительными переменными и полезными методами. android.graphics.Point
, который является обычным контейнером, но имя неправильное, и его основные члены называются x
и y
, что не идеально подходит для калибровки. Тем не менее, это кажется классом для использования / злоупотребления при получении ширины и высоты отображения из самой рамки Android, как показано здесь: Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x;
int height = size.y;
hashCode()
иParcelable
и в конечном итоге тратят драгоценное время на такие банальности, когда они могли просто использоватьPoint
, предоставленные прекрасным API Android, и перешли к более насущным вопросам;) – Stephan Henningsen 25 January 2017 в 00:01