【问题标题】:how can i bind the shapes i have defined in code behind in a datagrid column?如何绑定我在数据网格列后面的代码中定义的形状?
【发布时间】:2017-08-03 18:31:39
【问题描述】:

所以这是我的问题。我已经在 xaml 中构建了这个简单的界面

    <Window x:Class="WpfApplication2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApplication2"
        mc:Ignorable="d"
        Title="MainWindow" Height="302" Width="253.8">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition Height="*"></RowDefinition>
        </Grid.RowDefinitions>
        <StackPanel>
            <Label Target="{Binding ElementName=txtbxName}">_Cerca una lista</Label>
            <TextBox Text="{Binding SearchText, UpdateSourceTrigger=PropertyChanged}" ToolTip="Inserisci il nome di una lista per filtrare l'elenco"/>
            <DataGrid CanUserAddRows="False" x:Name="dg"  ItemsSource="{Binding MyFilteredItems}" AutoGenerateColumns="False" HorizontalAlignment="Right" Margin="0,0,1.2,0" >
                <DataGrid.Columns>
                    <DataGridTemplateColumn Width="*">
                        <DataGridTemplateColumn.Header >
                            <CheckBox HorizontalContentAlignment="Center" Checked="IsChecked" Unchecked="IsUncheck" ToolTip="Seleziona/Deseleziona tutto"/>
                        </DataGridTemplateColumn.Header>
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <CheckBox x:Name="c1" HorizontalAlignment="Stretch" IsChecked="{Binding Check}" />
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>
                    <DataGridTextColumn Binding="{Binding Name}">
                        <DataGridTextColumn.Header>Name</DataGridTextColumn.Header>
                    </DataGridTextColumn>
                    <DataGridTextColumn Binding="{Binding Dimension}">
                        <DataGridTextColumn.Header>Dimensione</DataGridTextColumn.Header>
                    </DataGridTextColumn>
                    <DataGridTextColumn Binding="{Binding Colour}">
                        <DataGridTextColumn.Header>Colour</DataGridTextColumn.Header>
                    </DataGridTextColumn>
                </DataGrid.Columns>
            </DataGrid>
        </StackPanel>
        <Button HorizontalAlignment="Left" VerticalAlignment="Bottom" Margin="10,0,0,35.4" Grid.Row="1" Width="60">Applica</Button>
        <Button HorizontalAlignment="Center" VerticalAlignment="Bottom" Margin="10,0,0,35.4" Grid.Row="1" Width="60">Nascondi</Button>
        <Button HorizontalAlignment="Right" VerticalAlignment="Bottom" Margin="10,0,0,35.4" Grid.Row="1" Width="60">Cancella</Button>
    </Grid>
</Window>

我的网格从类的可观察集合中获取数据,如下所示:

public class Righe :  INotifyPropertyChanged 
        {
            private bool check;

            public event PropertyChangedEventHandler PropertyChanged;

            public bool Check
            {
                get { return check; }
                set
                {
                    check = value;

                    OnPropertyChanged("Check");
                }
            }
            public string Name { get; set; }
            public string Dimension { get; set; }
            public Rectangle rect;
            public void OnPropertyChanged(string name)
            {
                if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(name));
            }
        }

我想要,而不是<DataGridTextColumn Binding="{Binding Colour}"> <DataGridTextColumn.Header>Colour</DataGridTextColumn.Header> </DataGridTextColumn>

在每个单元格中都有我在课堂上定义的矩形形状的列。我该怎么做?

【问题讨论】:

    标签: c# xaml wpfdatagrid


    【解决方案1】:

    在我看来,这种方法很糟糕,因为它不适合 MVVM,但如果你知道你在做什么,你可以使用 DataGridTemplateColumn

           <DataGridTemplateColumn>
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <ContentControl Content="{Binding rect}" />
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
           </DataGridTemplateColumn>
    

    【讨论】:

      猜你喜欢
      • 2016-07-23
      • 2015-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多