【问题标题】:WPF datagrid.rowstyle bindingWPF datagrid.rowstyle 绑定
【发布时间】:2015-09-25 21:09:24
【问题描述】:

我遇到了一个已知错误

System.Windows.Data 错误:2:找不到目标元素的管理 FrameworkElement 或 FrameworkContentElement。BindingExpression:Path=Percent;数据项=空;目标元素是 'GradientStop' (HashCode=81530);目标属性是“偏移”(类型“双”)

关于这部分代码:

        <DataGrid.RowStyle>
            <Style TargetType="DataGridRow">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding State}" Value="Started">
                        <Setter Property="Background">
                            <Setter.Value>
                                <LinearGradientBrush EndPoint="1,0" StartPoint="0,0">
                                    <GradientStop Color="Green" Offset="0" />
                                    <GradientStop Color="#FF2D2D30" Offset="{Binding Percent}" />
                                </LinearGradientBrush>
                            </Setter.Value>
                        </Setter>
                    </DataTrigger>
                    <Trigger Property="Validation.HasError" Value="true">
                        <Setter Property="BorderThickness" Value="1"/>
                        <Setter Property="BorderBrush" Value="Red"/>
                    </Trigger>
                </Style.Triggers>
            </Style>
        </DataGrid.RowStyle>

我尝试将DataContext 设置为代理,但没有成功:

        <DataGrid.Resources>
            <app:BindingProxy x:Key="proxy" Data="{Binding}" />
        </DataGrid.Resources>

        [...]
        <GradientStop Color="#FF2D2D30" Offset="{Binding Data.Percent, Source={StaticResource proxyRow}}" />

System.Windows.Data 错误:40:BindingExpression 路径错误:在“对象”“ViewModel”(HashCode=37637549)上找不到“百分比”属性。 BindingExpression:路径=数据.百分比; DataItem='BindingProxy' (HashCode=3342738);目标元素是 'GradientStop' (HashCode=64874797);目标属性是“偏移”(类型“双”)

这很明显,因为 Data 现在包含我的 ViewModel 控件的 DataContext。

有什么建议吗?谢谢!

【问题讨论】:

    标签: c# wpf mvvm binding datagrid


    【解决方案1】:

    正如其他帖子中所建议的,我认为它不适用于我的问题,但使用转换器非常适合!以下是一些参考资料:

    Binding GradientStop works but reports error

    How to bind GradientStop Colours or GradientStops Property in Silverlight?

        public object Convert(object value, Type targetType, object parameter,
            System.Globalization.CultureInfo culture)
        {
            Model.ListParameters parameters = (Model.ListParameters)value;
            if(parameters !=null)
            {
                var start = new GradientStop();
                start.Color = Colors.Green;
                start.Offset = 0;
    
                var stop = new GradientStop();
                stop.Color = (Color)ColorConverter.ConvertFromString("#FF2D2D30");
                stop.Offset = parameters .Percent;
    
                var result = new LinearGradientBrush();
                result.StartPoint = new Point(0, 0);
                result.EndPoint = new Point(1, 0);
                result.GradientStops.Add(start);
                result.GradientStops.Add(stop);
    
                return result;
            }
            return null;
        }
    

    还有 XAML

    <UserControl.Resources>
       <app:GradientProgressConverter  x:Key="GradientProgressConverter" />
    </UserControl.Resources>
    <DataGrid>
       <DataGrid.RowStyle>
          <Style TargetType="DataGridRow">
             <Style.Triggers>
                <DataTrigger Binding="{Binding State}" Value="Started">
                    <Setter Property="Background" Value="{Binding Converter={StaticResource GradientProgressConverter}}" />
                </DataTrigger>
             </Style.Triggers>
          </Style>
       </DataGrid.RowStyle>
    </<DataGrid>
    

    【讨论】:

      猜你喜欢
      • 2017-02-06
      • 2015-06-30
      • 2018-05-25
      • 1970-01-01
      • 1970-01-01
      • 2012-11-09
      • 2018-12-16
      • 2014-08-18
      • 2018-06-20
      相关资源
      最近更新 更多