Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF中datagrid列中的写入状态_C#_Wpf - Fatal编程技术网

C# WPF中datagrid列中的写入状态

C# WPF中datagrid列中的写入状态,c#,wpf,C#,Wpf,我有一个简单的WPF应用程序,它使用从绑定列表收集的数据填充行,如下所示: 现在您可以看到,我的第一列是空的,但我想写下取决于sts列的信息。例如:如果sts==8我想在第一个空白栏中写下字母R,当sts==0时将其留空。我该怎么做? 以下是我的WPF的背景代码: <DataGrid AutoGenerateColumns="False" Background="White" Height="316" HorizontalAlignment="Left" Name="dataGrid1"

我有一个简单的WPF应用程序,它使用从绑定列表收集的数据填充行,如下所示:

现在您可以看到,我的第一列是空的,但我想写下取决于
sts
列的信息。例如:如果
sts==8
我想在第一个空白栏中写下字母R,当
sts==0
时将其留空。我该怎么做? 以下是我的WPF的背景代码:

<DataGrid AutoGenerateColumns="False" Background="White" Height="316" HorizontalAlignment="Left" Name="dataGrid1" VerticalAlignment="Top" Width="640" SelectionMode="Single" IsReadOnly="True" ItemsSource="{Binding Oblista}" AutoGeneratingColumn="generiseColumn" >
<!---->
    <DataGrid.Resources>
        <Style TargetType="DataGridRow">
            <EventSetter Event="MouseDoubleClick" Handler="Row_DoubleClick"/>
            <EventSetter Event="MouseRightButtonDown" Handler="Row_RightCLick"/>
        </Style>
    </DataGrid.Resources>
<DataGrid.Columns>
    <DataGridTextColumn />
        <DataGridTextColumn Header="sts" Width="50" Binding="{Binding cflag}"/> 
        <DataGridTextColumn Header="Adresa"  Width="80" Binding="{Binding Sadr_reg}"/>
        <DataGridTextColumn Header="Opis" Width="200" Binding="{Binding naziv}"/> 
        <DataGridTextColumn Header="Tip" Width="80" Binding="{Binding Stip_reg}"/>
        <DataGridTextColumn Header="Vrednost" Width="80" Binding="{Binding sVal}"/>
        <DataGridTextColumn Header="Min" Width="40" Binding="{Binding lo_limit}"/>
        <DataGridTextColumn Header="Max" Width="40" Binding="{Binding hi_limit}"/>
        <DataGridTextColumn Header="Rw" Width="40" Binding="{Binding write}"/> 
    </DataGrid.Columns>
</DataGrid>   

XAML.CS:

 public  BindingList<PIO_CARD> Oblista = new BindingList<PIO_CARD>();

public MainWindow()
{
    InitializeComponent();
    dataGrid1.ItemsSource = Oblista; 
}
public BindingList Oblista=new BindingList();
公共主窗口()
{
初始化组件();
dataGrid1.ItemsSource=Oblista;
}

您可以将空的
DataGridTextColumn
替换为
DataGridTemplateColumn
,该列具有
CellTemplate
DataTrigger

<DataGridTemplateColumn>
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <TextBlock>
                <TextBlock.Style>
                    <Style TargetType="TextBlock">
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding cflag}" Value="8">
                                <Setter Property="Text" Value="R" />
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </TextBlock.Style>
            </TextBlock>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
XAML:

<DataGridTextColumn Binding="{Binding FirstValue}"/>

您可以编写
数据触发器
,也可以扩展
PIO_卡
类,并添加一个属性,将第一列绑定到:

public class ExtendedPIO_CARD : PIO_CARD
{
    public string FirstColumn
    {
        get
        {

            if (cflag == 8)
            {
                return "R";
            }
            if(cflag == 0)
            {
                return  string.Empty;
            }

            return "default";
        }
    } 
}

为什么不在viewmodel中执行此操作,并将新属性添加到要绑定网格的列表中?
public class ExtendedPIO_CARD : PIO_CARD
{
    public string FirstColumn
    {
        get
        {

            if (cflag == 8)
            {
                return "R";
            }
            if(cflag == 0)
            {
                return  string.Empty;
            }

            return "default";
        }
    } 
}