WPF - 我在MVVM模式中的代码

时间:2017-10-30 19:47:10

标签: c# wpf mvvm binding grid

我想改变我的"日历"到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);
            }
        }
    }

结果:

Result

编辑:

好吧,我找到了办法。

现在,我想知道如何将一些点击功能绑定到矩形... 我需要的是:当我单击矩形时,它将查看具有选定用户的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>

这种结果与代码隐藏方式非常相似:

MVVM Mode Result

代码隐藏:

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
            });
        }
    }
}

0 个答案:

没有答案