如何将ColorPicker添加到Datagrid Cell-MVVM Light

时间:2018-10-19 21:25:09

标签: c# wpf mvvm wpf-controls mvvm-light

如何将ColorPicker添加到数据网格中的单元格?

我正在做的事情是使用Newtonsoft将JSON对象保存在文本文件中,然后在数据网格中显示它们,对象的保存和加载工作正常,但并不是我想要的。我的问题是,我希望能够保存十六进制数字,然后在以后可以加载它们并在ColorPicker中将其显示为颜色。我现在的方式是使用字符串保存十六进制数字,并在将它们加载为简单文本时加载,这不是我想要的。

所以这里的主要问题是,如何将ColorPicker添加到数据网格的单元格中并显示颜色?

这就是我所拥有的...

enter image description here

XAML

    <Window x:Class="Tool.Views.WiresView"
            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:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"
            xmlns:ignore="http://www.galasoft.ch/ignore"
            mc:Ignorable="d ignore"
            Title="Wires" Height="715" Width="790"
            DataContext="{Binding WiresDialogBox, Source={StaticResource Locator}}">

        <Grid>
            <DataGrid x:Name="dataGrid"
                      ItemsSource="{Binding WiresObservableCollection}"
                      AutoGenerateColumns="False">

                <DataGrid.Columns >
                    <DataGridTextColumn Header="Length" Binding="{Binding WireLength}"></DataGridTextColumn>
                    <DataGridTextColumn Header="Color" Binding="{Binding WireColor}"></DataGridTextColumn>
                    <DataGridTextColumn Header="Description" Binding="{Binding WireDescription}"></DataGridTextColumn>
                </DataGrid.Columns>
            </DataGrid>
        </Grid>
    </Window>

模型

public class Wire
{
    public string WireLength { get; set; }
    public string WireColor { get; set; }
    public string WireDescription { get; set; }
}

仅供参考- 我正在使用MVVM LightNewtonsoft解析JSON对象,并使用toolkit解析ColorPicker。

1 个答案:

答案 0 :(得分:0)

我按照DataGridTemplateColumn的建议使用了ASh

这是我的方法。

            <DataGrid.Columns >
                <DataGridTextColumn Header="Length" Binding="{Binding WireLength}"></DataGridTextColumn>

               <DataGridTemplateColumn Header="Color" SortMemberPath="WireColor">
                  <DataGridTemplateColumn.CellTemplate>
                      <DataTemplate>
                           <Label  Background="{Binding Path=WireColor, Mode=TwoWay}"/>
                      </DataTemplate>
                  </DataGridTemplateColumn.CellTemplate>
               </DataGridTemplateColumn>

                <DataGridTextColumn Header="Description" Binding="{Binding WireDescription}"></DataGridTextColumn>
            </DataGrid.Columns>