У меня есть холст и сетка данных в окне WPF (MVVM), сетка данных состоит из 4 столбцов (ширина, высота, CanvasTop, CanvasLeft), а сетка данных состоит из 3 строк и 3 прямоугольников в части canavs.как только я выберу строку таблицы данных, соответствующий прямоугольник должен быть выделен.Например: строка сетки данных имеет 50, 50, 100, 100 как Ширина, Высота, Верх холста, Холст влево соответственно, затем прямоугольник шириной 50, высота 50 от холста 100, холст влево 100 должен быть выделен.
MainWindow.xaml
<ItemsControl ItemsSource="{Binding RectangleData, Mode=TwoWay}" >
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas Background="LightYellow"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemContainerStyle>
<Style>
<Setter Property="Canvas.Left" Value="{Binding Left, Mode=TwoWay}"/>
<Setter Property="Canvas.Top" Value="{Binding Top, Mode=TwoWay}"/>
</Style>
</ItemsControl.ItemContainerStyle>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Rectangle Width="{Binding Width, Mode=TwoWay}" Height="{Binding Height, Mode=TwoWay}" Style="{StaticResource StyleRectangle}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
ViewModel.cs
public class MainViewModel:ViewModelBase
{
private ICommand _AddRectangleCmd;
private ObservableCollection<Attributes> _RectangleData;
private Attributes _SelectedRectangle;
public RelayCommand MyCommand { get; private set; }
public MainViewModel()
{
RectangleData = new ObservableCollection<Attributes>();
MyCommand = new RelayCommand(Excute);
}
public ICommand AddRectangleCmd
{
get
{
if(_AddRectangleCmd == null)
{
_AddRectangleCmd = new RelayCommand(param =>
OpenRectangleForm(), null);
}
return _AddRectangleCmd;
}
set
{
_AddRectangleCmd = value;
OnPropertyRaised("AddRectangleCmd");
}
}
public ObservableCollection<Attributes> RectangleData
{
get
{
return _RectangleData;
}
set
{
_RectangleData = value;
OnPropertyRaised("RectangleData");
}
}
public Attributes SelectedRectangle
{
get
{
return _SelectedRectangle;
}
set
{
if (_SelectedRectangle != value)
{
_SelectedRectangle = value;
OnPropertyRaised("SelectedRectangle");
}
}
}
public void Excute(object attribute)
{
SelectedRectangle = (Attributes)attribute;
}
private void OpenRectangleForm()
{
AttributeWindow win = new AttributeWindow(this);
win.Show();
}
public void DrawRectangle(Attributes att)
{
try
{
//To Draw Rectangle in the Canvas and Add to the DataGrid
RectangleData.Add(att);
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
После выбора любой строки таблицы данных соответствующий прямоугольник в канве будет выделен.