GridViewRow 上的条件背景基于 DataGrid 旁边的文本框值

Conditional background on GridViewRow based on textbox value next to DataGrid

如何将 TextBox 的值传递给 StyleSelector 以便我可以 return 正确的样式?

我希望能够通过比较显示的对象的属性来有条件地选择一行的背景在具有输入控件 (例如 TextBox)的 值的行中。

我制作了一个包含两种样式的 StyleSelector class 和一个包含 TextBox 值的 属性。

    public class OutOfBoundsRowStyleSelector : StyleSelector
{
    public double FilterValue { get; set; }
    public Style DefaultStyle { get; set; }
    public Style OutOfBoundsStyle { get; set; }


    public override Style SelectStyle(object item, DependencyObject container)
    {

        // Compare FilterValue to property of item  and return the appropriate style here.

        return DefaultStyle; 

    }
}

我添加了一个 TextBox 并将值绑定到 ViewModel 中的 属性。

<TextBox x:Name="txtBoundsFilter" Text="{Binding BoundsFilter}"/>

我在 xaml 中填充了这些样式并尝试将 TextBox 值绑定到 StyleSelector class 中的 属性。

            <Classes:OutOfBoundsRowStyleSelector x:Key="OutOfBoundsRowStyleSelector">
            <Classes:OutOfBoundsRowStyleSelector.DefaultStyle>
                <Style TargetType="telerik:GridViewRow">
                    <Setter Property="Background" Value="White"/>
                </Style>
            </Classes:OutOfBoundsRowStyleSelector.DefaultStyle>
            <Classes:OutOfBoundsRowStyleSelector.OutOfBoundsStyle>
                <Style TargetType="telerik:GridViewRow">
                    <Setter Property="Background" Value="Red" />
                </Style>
            </Classes:OutOfBoundsRowStyleSelector.OutOfBoundsStyle>
            <Classes:OutOfBoundsRowStyleSelector.FilterValue>
                <Binding  Path="BoundsFilter" Mode="TwoWay"/>
            </Classes:OutOfBoundsRowStyleSelector.FilterValue>
        </Classes:OutOfBoundsRowStyleSelector>

最后我将 RowStyleSelector 添加到 DataGrid。

            <telerik:RadGridView x:Name="dataGrid" ItemsSource="{Binding BatchList} RowStyleSelector="{StaticResource OutOfBoundsRowStyleSelector}"  >

很遗憾,您不能使用这样的绑定。我收到以下错误消息:

A 'Binding' cannot be set on the 'FilterValue' property of type 'OutOfBoundsRowStyleSelector'. A 'Binding' can only be set on a DependencyProperty of a DependencyObject.

我向项目模型添加了一个额外的 属性。然后,每当我刷新网格时,我都会在每个项目中填写 TextBox 的值。这样我就可以通过 GetStyle() 方法的 item 参数访问该值。 这似乎不是最优雅的方式,但它为我完成了工作。