我想改变我的"日历"到MVVM模式...... 我正在使用一个表格列出顶部标题中每月的所有日期,以及左侧标题中一天中的所有小时数(从0到23)...我正在动态添加行,列和矩形一个月的每一天和每小时......
问题是,如何通过绑定绘制此表? 我想知道固定行(几小时),并且在每一行中,一个对象具有矩形中每月的动态天数。 但是我怎么能这样做呢?
我的方式:
private void DrawRectangles(int dias)
{
GridDias.RowDefinitions.Clear();
GridDias.ColumnDefinitions.Clear();
GridDias.RowDefinitions.Add(new RowDefinition());
GridDias.ColumnDefinitions.Add(new ColumnDefinition());
for (var i = 0; i < 24; i++)
{
GridDias.RowDefinitions.Add(new RowDefinition());
var txtHora = new TextBlock();
txtHora.Text = (i).ToString();
txtHora.Style = Resources["HeaderCalendario"] as Style;
txtHora.SetValue(Grid.RowProperty, i+1);
txtHora.SetValue(Grid.ColumnProperty, 0);
GridDias.Children.Add(txtHora);
}
for (var i = 1; i <= dias; i++)
{
GridDias.ColumnDefinitions.Add(new ColumnDefinition());
var txtDia = new TextBlock();
txtDia.Text = (i).ToString();
txtDia.Style = Resources["HeaderCalendario"] as Style;
txtDia.SetValue(Grid.RowProperty, 0);
txtDia.SetValue(Grid.ColumnProperty, i);
GridDias.Children.Add(txtDia);
}
for (var i = 1; i < GridDias.RowDefinitions.Count; i++)
{
for (var j = 1; j < GridDias.ColumnDefinitions.Count; j++)
{
var rec = new Rectangle();
rec.Stroke = new SolidColorBrush(Colors.Black);
rec.Fill = new SolidColorBrush(Colors.White);
rec.MouseLeftButtonDown += Rectangle_LeftButtonDown;
rec.MouseRightButtonDown += Rectangle_MouseRightButtonDown;
rec.MouseEnter += Rectangle_MouseEnter;
rec.MouseLeave += Rectangle_MouseLeave;
rec.SetValue(Grid.RowProperty, i);
rec.SetValue(Grid.ColumnProperty, j);
GridDias.Children.Add(rec);
}
}
}
结果:
编辑:
好吧,我找到了办法。
现在,我想知道如何将一些点击功能绑定到矩形... 我需要的是:当我单击矩形时,它将查看具有选定用户的ListBox,其具有需要应用于绑定到矩形的对象的颜色...
换句话说,我需要更改&#34; Hora0,Hora1,Hora2 ......和#34;的绑定对象。当矩形是Left_Clicked和Right_Clicked时,到另一个对象。
我能做的唯一方法就是通过代码隐藏,这不是一个好习惯。
我非常高兴能帮助的程序员数量。谢谢!
我目前的代码:
<Window.Resources>
<CollectionViewSource x:Key="Operadores" Source="{Binding ListaOperadores}"/>
<Style x:Key="HeaderCalendario" TargetType="TextBlock">
<Setter Property="FontWeight" Value="Bold"></Setter>
<Setter Property="TextAlignment" Value="Center"></Setter>
</Style>
<DataTemplate x:Key="GridHeaderDia">
<TextBlock TextAlignment="Center" FontWeight="Bold" Text="{Binding Dia}"></TextBlock>
</DataTemplate>
<DataTemplate x:Key="GridHeaderHora">
<TextBlock TextAlignment="Center" FontWeight="Bold" Text="{Binding Hora}"></TextBlock>
</DataTemplate>
<DataTemplate x:Key="GridEscalaTemplate">
<Grid Height="{Binding Path=ActualHeight, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ItemsControl}}}">
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<Rectangle Grid.Row="0" Stroke="Black" Fill="{Binding Hora0.Cor}"></Rectangle>
<Rectangle Grid.Row="1" Stroke="Black" Fill="{Binding Hora1.Cor}"></Rectangle>
<Rectangle Grid.Row="2" Stroke="Black" Fill="{Binding Hora2.Cor}"></Rectangle>
<Rectangle Grid.Row="3" Stroke="Black" Fill="{Binding Hora3.Cor}"></Rectangle>
<Rectangle Grid.Row="4" Stroke="Black" Fill="{Binding Hora4.Cor}"></Rectangle>
<Rectangle Grid.Row="5" Stroke="Black" Fill="{Binding Hora5.Cor}"></Rectangle>
<Rectangle Grid.Row="6" Stroke="Black" Fill="{Binding Hora6.Cor}"></Rectangle>
<Rectangle Grid.Row="7" Stroke="Black" Fill="{Binding Hora7.Cor}"></Rectangle>
<Rectangle Grid.Row="8" Stroke="Black" Fill="{Binding Hora8.Cor}"></Rectangle>
<Rectangle Grid.Row="9" Stroke="Black" Fill="{Binding Hora9.Cor}"></Rectangle>
<Rectangle Grid.Row="10" Stroke="Black" Fill="{Binding Hora10.Cor}"></Rectangle>
<Rectangle Grid.Row="11" Stroke="Black" Fill="{Binding Hora11.Cor}"></Rectangle>
<Rectangle Grid.Row="12" Stroke="Black" Fill="{Binding Hora12.Cor}"></Rectangle>
<Rectangle Grid.Row="13" Stroke="Black" Fill="{Binding Hora13.Cor}"></Rectangle>
<Rectangle Grid.Row="14" Stroke="Black" Fill="{Binding Hora14.Cor}"></Rectangle>
<Rectangle Grid.Row="15" Stroke="Black" Fill="{Binding Hora15.Cor}"></Rectangle>
<Rectangle Grid.Row="16" Stroke="Black" Fill="{Binding Hora16.Cor}"></Rectangle>
<Rectangle Grid.Row="17" Stroke="Black" Fill="{Binding Hora17.Cor}"></Rectangle>
<Rectangle Grid.Row="18" Stroke="Black" Fill="{Binding Hora18.Cor}"></Rectangle>
<Rectangle Grid.Row="19" Stroke="Black" Fill="{Binding Hora19.Cor}"></Rectangle>
<Rectangle Grid.Row="20" Stroke="Black" Fill="{Binding Hora20.Cor}"></Rectangle>
<Rectangle Grid.Row="21" Stroke="Black" Fill="{Binding Hora21.Cor}"></Rectangle>
<Rectangle Grid.Row="22" Stroke="Black" Fill="{Binding Hora22.Cor}"></Rectangle>
<Rectangle Grid.Row="23" Stroke="Black" Fill="{Binding Hora23.Cor}"></Rectangle>
</Grid>
</DataTemplate>
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="Auto"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid Grid.Row="0" Grid.Column="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition Width="Auto"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Button Content="Anterior"></Button>
<TextBlock Grid.Column="1" TextAlignment="Center" Text="{Binding SelectedDate, StringFormat=yyyy-MM-dd}"></TextBlock>
<Button Grid.Column="2" Content="Próximo"></Button>
</Grid>
<TextBlock Grid.Row="1" Grid.Column="1" TextAlignment="Center" FontWeight="Bold" FontSize="14">DIAS</TextBlock>
<TextBlock Margin="5,0,0,0" Grid.Column="0" Grid.Row="2" TextAlignment="Center" VerticalAlignment="Center" FontSize="14" FontWeight="Bold" Width="10" TextWrapping="Wrap">HORAS</TextBlock>
<!--<Grid Grid.Row="2" Grid.Column="1" x:Name="GridDias">
<Grid.RowDefinitions>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
</Grid.ColumnDefinitions>
</Grid>-->
<Grid Grid.Row="2" Grid.Column="1">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<ItemsControl Grid.Row="0" Grid.Column="1" ItemsSource="{Binding ListaDias}" ItemTemplate="{StaticResource GridHeaderDia}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Rows="1"></UniformGrid>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
<ItemsControl Margin="5,0" Grid.Row="1" Grid.Column="0">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Columns="1"></UniformGrid>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<TextBlock TextAlignment="Center" VerticalAlignment="Center" FontWeight="Bold">0</TextBlock>
<TextBlock TextAlignment="Center" VerticalAlignment="Center" FontWeight="Bold">1</TextBlock>
<TextBlock TextAlignment="Center" VerticalAlignment="Center" FontWeight="Bold">2</TextBlock>
<TextBlock TextAlignment="Center" VerticalAlignment="Center" FontWeight="Bold">3</TextBlock>
<TextBlock TextAlignment="Center" VerticalAlignment="Center" FontWeight="Bold">4</TextBlock>
<TextBlock TextAlignment="Center" VerticalAlignment="Center" FontWeight="Bold">5</TextBlock>
<TextBlock TextAlignment="Center" VerticalAlignment="Center" FontWeight="Bold">6</TextBlock>
<TextBlock TextAlignment="Center" VerticalAlignment="Center" FontWeight="Bold">7</TextBlock>
<TextBlock TextAlignment="Center" VerticalAlignment="Center" FontWeight="Bold">8</TextBlock>
<TextBlock TextAlignment="Center" VerticalAlignment="Center" FontWeight="Bold">9</TextBlock>
<TextBlock TextAlignment="Center" VerticalAlignment="Center" FontWeight="Bold">10</TextBlock>
<TextBlock TextAlignment="Center" VerticalAlignment="Center" FontWeight="Bold">11</TextBlock>
<TextBlock TextAlignment="Center" VerticalAlignment="Center" FontWeight="Bold">12</TextBlock>
<TextBlock TextAlignment="Center" VerticalAlignment="Center" FontWeight="Bold">13</TextBlock>
<TextBlock TextAlignment="Center" VerticalAlignment="Center" FontWeight="Bold">14</TextBlock>
<TextBlock TextAlignment="Center" VerticalAlignment="Center" FontWeight="Bold">15</TextBlock>
<TextBlock TextAlignment="Center" VerticalAlignment="Center" FontWeight="Bold">16</TextBlock>
<TextBlock TextAlignment="Center" VerticalAlignment="Center" FontWeight="Bold">17</TextBlock>
<TextBlock TextAlignment="Center" VerticalAlignment="Center" FontWeight="Bold">18</TextBlock>
<TextBlock TextAlignment="Center" VerticalAlignment="Center" FontWeight="Bold">19</TextBlock>
<TextBlock TextAlignment="Center" VerticalAlignment="Center" FontWeight="Bold">20</TextBlock>
<TextBlock TextAlignment="Center" VerticalAlignment="Center" FontWeight="Bold">21</TextBlock>
<TextBlock TextAlignment="Center" VerticalAlignment="Center" FontWeight="Bold">22</TextBlock>
<TextBlock TextAlignment="Center" VerticalAlignment="Center" FontWeight="Bold">23</TextBlock>
</ItemsControl>
<ItemsControl Background="Blue" Grid.Row="1" Grid.Column="1" VerticalAlignment="Stretch" ItemsSource="{Binding ListaDias}" ItemTemplate="{StaticResource GridEscalaTemplate}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Rows="1"></UniformGrid>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</Grid>
<ListBox x:Name="listaOperadores" Grid.Column="3" Grid.Row="2" ItemsSource="{Binding ListaOperadores}">
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Style.Triggers>
<Trigger Property="IsSelected" Value="True" >
<Setter Property="FontWeight" Value="Bold" />
<Setter Property="Background" Value="Transparent" />
<Setter Property="Foreground" Value="Black" />
</Trigger>
</Style.Triggers>
<Style.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent"/>
</Style.Resources>
</Style>
</ListBox.ItemContainerStyle>
<ListBox.ItemTemplate>
<DataTemplate>
<Grid Margin="0,5">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Rectangle Grid.Column="0" Width="20" Height="20" Fill="White"></Rectangle>
<TextBlock Margin="5,0,0,0" Grid.Column="1" Text="{Binding Nome}"></TextBlock>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<StackPanel Margin="5" Grid.Row="3" Grid.ColumnSpan="3" Orientation="Horizontal">
<RadioButton GroupName="TipoSelecao" Content="Ponto a Ponto"></RadioButton>
<RadioButton Margin="5,0,0,0" GroupName="TipoSelecao" Content="Linha Horizontal"></RadioButton>
</StackPanel>
<Button Grid.Row="3" Grid.Column="2">Salvar</Button>
</Grid>
这种结果与代码隐藏方式非常相似:
代码隐藏:
public partial class Escalas : Window
{
public Escalas()
{
InitializeComponent();
var vm = new EscalasVM
{
ListaDias = new ObservableCollection<ItemDia>()
};
DataContext = vm;
var reinaldo = new Operador
{
Id = 1,
Cor = new SolidColorBrush(Colors.Green),
Nome = "Reinaldo"
};
var moreira = new Operador
{
Id = 2,
Cor = new SolidColorBrush(Colors.Red),
Nome = "Moreira"
};
for (var i = 1; i <= 28; i++)
{
vm.ListaDias.Add(new ItemDia
{
Dia = i,
Hora0 = moreira,
Hora1 = reinaldo,
Hora2 = reinaldo,
Hora3 = reinaldo,
Hora4 = reinaldo,
Hora5 = reinaldo,
Hora6 = reinaldo,
Hora7 = reinaldo,
Hora8 = reinaldo,
Hora9 = reinaldo,
Hora10 = reinaldo,
Hora11 = reinaldo,
Hora12 = reinaldo,
Hora13 = reinaldo,
Hora14 = reinaldo,
Hora15 = reinaldo,
Hora16 = reinaldo,
Hora17 = moreira,
Hora18 = moreira,
Hora19 = moreira,
Hora20 = moreira,
Hora21 = moreira,
Hora22 = moreira,
Hora23 = moreira
});
}
}
}