如果行为空,如何为列表视图的行设置背景或边框画笔颜色? [英] How to set background or border brush color for the row of list view if row is empty?

查看:59
本文介绍了如果行为空,如何为列表视图的行设置背景或边框画笔颜色?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

您好, 

我正在使用带有文本框的列表视图控件,如果任何文本框为空,我想突出显示红色的行。 如何在WPF中实现这个功能?我使用的是mvvm。 

I am using list view control with text box and i want to highlight the row with red color if any text box is empty.  How to implement this things in WPF? I am using mvvm. 

列表视图xaml是。 

List view xaml is. 

 <ListView ItemsSource="{Binding LoadBankFormModelObservableCollection,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Margin="0,0,0,0" x:Name="vcrListView"
                                     ScrollViewer.VerticalScrollBarVisibility="Visible" ScrollViewer.HorizontalScrollBarVisibility="Hidden" 
                                          Height="267"  Width="1310" HorizontalAlignment="Left">
                                    <ListView.ItemContainerStyle>
                                        <Style TargetType="ListViewItem">
                                            <Setter Property="HorizontalContentAlignment" Value="Stretch" />
                                        </Style>
                                    </ListView.ItemContainerStyle>
                                    <ListView.View>
                                        <GridView>
                                            <GridViewColumn  Header="Time" Width="148">
                                                <GridViewColumn.CellTemplate>
                                                    <DataTemplate>
                                                        <telerik:RadTimePicker SelectedValue="{Binding Time,Mode=TwoWay}" BorderBrush="{Binding TimeBorderColor}" >
                                                        </telerik:RadTimePicker>
                                                        <!--<TextBox Text="{Binding Hours,Mode=TwoWay}"></TextBox>-->
                                                    </DataTemplate>
                                                </GridViewColumn.CellTemplate>
                                            </GridViewColumn>
                                            <GridViewColumn  Header="% of Max" Width="81">
                                                <GridViewColumn.CellTemplate>
                                                    <DataTemplate>
                                                        <TextBox Text="{Binding PerOfMAX,Mode=TwoWay}" BorderBrush="{Binding PerofMaxBorderColor}"></TextBox>
                                                    </DataTemplate>
                                                </GridViewColumn.CellTemplate>
                                            </GridViewColumn>

                                            <GridViewColumn  Header="Actual KW" Width="101">
                                                <GridViewColumn.CellTemplate>
                                                    <DataTemplate>
                                                        <TextBox Text="{Binding ACTUALKW,Mode=TwoWay}" BorderBrush="{Binding ACTUALKWBorderColor}" ></TextBox>
                                                    </DataTemplate>
                                                </GridViewColumn.CellTemplate>
                                            </GridViewColumn>
                                            <GridViewColumn  Header="Voltage" Width="91">
                                                <GridViewColumn.CellTemplate>
                                                    <DataTemplate>
                                                        <TextBox Text="{Binding VOLTAGE,Mode=TwoWay}" BorderBrush="{Binding VOLTAGEBorderColor}"></TextBox>
                                                    </DataTemplate>
                                                </GridViewColumn.CellTemplate>
                                            </GridViewColumn>
                                            <GridViewColumn  Header="AMPS L1" Width="91">
                                                <GridViewColumn.CellTemplate>
                                                    <DataTemplate>
                                                        <TextBox Text="{Binding AMPSL1,Mode=TwoWay}" BorderBrush="{Binding AMPSL1BorderColor}"></TextBox>
                                                    </DataTemplate>
                                                </GridViewColumn.CellTemplate>
                                            </GridViewColumn>
                                            <GridViewColumn  Header="AMPS L2" Width="91">
                                                <GridViewColumn.CellTemplate>
                                                    <DataTemplate>
                                                        <TextBox Text="{Binding AMPSL2,Mode=TwoWay}" BorderBrush="{Binding AMPSL2BorderColor}"></TextBox>
                                                    </DataTemplate>
                                                </GridViewColumn.CellTemplate>
                                            </GridViewColumn>

                                            <GridViewColumn  Header="AMPS L3" Width="91">
                                                <GridViewColumn.CellTemplate>
                                                    <DataTemplate>
                                                        <TextBox Text="{Binding AMPSL3,Mode=TwoWay}" BorderBrush="{Binding AMPSL3BorderColor}"></TextBox>
                                                    </DataTemplate>
                                                </GridViewColumn.CellTemplate>
                                            </GridViewColumn>

                                            <GridViewColumn  Header="Hertz" Width="90">
                                                <GridViewColumn.CellTemplate>
                                                    <DataTemplate>
                                                        <TextBox Text="{Binding HERTZ,Mode=TwoWay}" BorderBrush="{Binding HERTZBorderColor}"></TextBox>
                                                    </DataTemplate>
                                                </GridViewColumn.CellTemplate>
                                            </GridViewColumn>

                                            <GridViewColumn  Header="Coolant Temp" Width="103">
                                                <GridViewColumn.CellTemplate>
                                                    <DataTemplate>
                                                        <TextBox Text="{Binding COOLANTTEMP,Mode=TwoWay}" BorderBrush="{Binding COOLANTTEMPBorderColor}"></TextBox>
                                                    </DataTemplate>
                                                </GridViewColumn.CellTemplate>
                                            </GridViewColumn>

                             

                                            <GridView.ColumnHeaderContainerStyle>
                                                <Style TargetType="GridViewColumnHeader">
                                                    <Setter Property="FontWeight" Value="Bold" />
                                                    <Setter Property="HorizontalContentAlignment" Value="Left"></Setter>
                                                </Style>
                                            </GridView.ColumnHeaderContainerStyle>

                                        </GridView>

                                    </ListView.View>

                                    <ie:Interaction.Triggers>
                                        <ie:EventTrigger EventName="GotFocus">
                                            <ie:InvokeCommandAction Command="{Binding TextBoxGotFocusCommand}" />
                                        </ie:EventTrigger>
                                    </ie:Interaction.Triggers>

                                </ListView>

请提供完整的解决方案。

Please provide need full solution.

谢谢。

推荐答案

Hi Ankit,

Hi Ankit,

在你的标记中,你有

   <ListView.ItemContainerStyle>
        <Style TargetType="ListViewItem">
                <Setter Property="HorizontalContentAlignment" Value="Stretch" />
        </Style>
   </ListView.ItemContainerStyle>

每一行都在listviewitem中,您需要为该样式添加内容。

Each row is in a listviewitem and you will want to add something to that style.

我建议您下载snoop并查看从标记中获得的内容。如果你还没有使用它,它对于任何wpf开发人员来说都是必须的。

I suggest you download snoop and take a look at what you get from your markup. If you don't use it already, it's pretty much a must have for any wpf developer.

listview项目有一个你可以绑定或设置的背景属性。我建议这里数据触发器可能是最好的。

A listview item has a background property you could bind or set. I suggest here a datatrigger is probably best.

没有自动任何字段是零长度或空标记,你可以放在那里,所以你需要一些东西来做那个逻辑。 你可以将它放在你的viewmodel中并公开一个公共bool来驱动你的数据触发器,或者你可以编写一个转换器。
为了做到这一点,它可能必须是一个多转换器和多重绑定。如果你肯定知道空意味着null那么多数据触发器可以做到这一点。

There is no automatic any field is zero length or null markup you can put in there so you need something to do that logic.  You could put that in your viewmodel and expose a public bool to drive your datatrigger or you could write a converter. To do that neatly it would probably have to be a multiconverter and multibinding. If you knew for sure that empty means null then a multidatatrigger could do this.

无论如何,具有viewmodel属性的数据触发器看起来像:

Anyhow, a datatrigger with a viewmodel property would look something like:

      <Style.Triggers>
        <DataTrigger Binding="{Binding AnyEmpty}"
                      Value="true">
          <Setter Property="Background"
                  Value="Red" />
        </DataTrigger>
      </Style.Triggers>


显然,AnyEmpty需要遍历字符串并根据您的逻辑返回true / false。

Obviously, AnyEmpty would need to iterate through the strings and return true/false based on your logic.


这篇关于如果行为空,如何为列表视图的行设置背景或边框画笔颜色?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆