необходимо просмотреть два разных элемента управления, которые мне нужно добавить в мой список. Элементы управления типа IControllistbox с двумя различными Datatemplates
так я сделал следующее:
Controls.cs
interface IControl
{
double X { get; set; }
double Y { get; set; }
}
class MyButton : Button, IControl, INotifyPropertyChanged
{
public MyButton(string buttonText, double x, double y)
{
this.Content = buttonText;
this.x = x;
this.y = y;
}
private double x = 0;
private double y = 0;
public MyButton()
{
}
public double X
{
get
{ return x;}
set
{
x = value;
OnPropertyChanged("X");
}
}
public double Y
{
get { return y;}
set
{
y = value;
OnPropertyChanged("Y");
}
}
}
class MyLabel : Label, IControl, INotifyPropertyChanged
{
public MyLabel(int number, double x, double y)
{
this.Content = number.ToString(CultureInfo.InvariantCulture);
this.x = x;
this.y = y;
}
private double x = 0;
private double y = 0;
public MyLabel()
{
}
public double X
{
get{ return x;}
set
{
x = value;
OnPropertyChanged("X");
}
}
public double Y
{
get{ return y;}
set
{
y = value;
OnPropertyChanged("Y");
}
}
}
теперь ViewModel.cs я есть
class ViewModel
{
private readonly ObservableCollection<IControl> controls = new ObservableCollection<IControl>();
public ViewModel()
{
var m1 = new MyButton("Test String inside button",0,0);
var m2 = new MyLabel(1123, 0, 80);
controls.Add(m1);
controls.Add(m2);
}
public ObservableCollection<IControl> Controls
{
get {return controls;}
}
}
и в моем MainWindow. xaml
<ListBox
x:Name="listBox"
ItemsSource="{Binding Controls}"
SelectionMode="Extended"
>
<ListBox.Resources>
<DataTemplate x:Key="buttonTemplate" DataType="{x:Type local:MyButton}">
<Button Content="{Binding}"
MouseDown="button_MouseDown"
PreviewMouseUp="button_MouseUp"
PreviewMouseMove="button_MouseMove"
/>
</DataTemplate>
<DataTemplate x:Key="labelTemplate" DataType="{x:Type local:MyLabel}">
<Label Content="{Binding}" Background="Aqua"/>
</DataTemplate>
</ListBox.Resources>
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<Canvas/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemContainerStyle>
<Style
TargetType="ListBoxItem"
>
<Setter
Property="Canvas.Left"
Value="{Binding X}"
/>
<Setter
Property="Canvas.Top"
Value="{Binding Y}"
/>
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
В списке есть MyButton и MyLabel, которые я добавил к наблюдаемому набору, но в datatemplates ничего не делают. События в buttonTemplate не срабатывают, и фон метки не установлен.
Что не так? любая помощь действительно оценена.
Заранее спасибо
Является 'MyButton' унаследовал от' System.Windows. Controls.Button' и 'MyLabel' - из' System.Windows.Controls.Label'? – Dennis
Да и MyLabel, и MyButton ... я не нашел другого способа добавить их в один наблюдаемый коллектив, если я не нашел общий тип между ними. – lebhero