【问题标题】:Compare properties in ReadOnlyBinding telerik RadGridView比较 ReadOnlyBinding telerik RadGridView 中的属性
【发布时间】:2015-07-15 11:27:43
【问题描述】:

我在MVVM WPF 应用程序中使用telerik:RadgridView 控件。在一个场景中,我必须比较两个属性并将属性IsReadOnlybinding 设置为列的“True”或“False”。

//代码:

    <telerik:GridViewDataColumn Header="Name" DataMemberBinding="{Binding Name, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" IsReadOnlyBinding="{Binding IsExists }" >    
        <telerik:GridViewDataColumn.CellEditTemplate>
                     <DataTemplate>
                           <TextBox Text="{Binding Name, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" MaxLength="30" SelectionLength="30" />
                     </DataTemplate>
</telerik:GridViewDataColumn.CellEditTemplate>
    </telerik:GridViewDataColumn>

在上面的代码中,我检查了IsExists 属性并创建了ReadOnly 列。现在我必须检查另一个属性“Id”。如果 Id 属性大于 0 且 IfExistsTrue,则将列设为 ReadOnly

我怎样才能做到这一点?

【问题讨论】:

  • 使用转换器检查这两个属性并根据结果返回布尔值。
  • @Karuppasamy :如何传递两个参数?也在 IsReadOnlyBinding 内部。
  • 你可以使用 IMultivalueConverter 来传递多个属性

标签: wpf xaml mvvm telerik radgridview


【解决方案1】:

我在此给出了一个答案,其中我使用了 TextBox 而不是 RadGridView 并使用了 IsReadOnly 属性而不是 IsReadOnlyBinding(因为我没有 Telerik 控件访问权限)。

下面是 Xaml:

<TextBox Text="{Binding TextProp}" Height="30" Width="100" >
        <TextBox.IsReadOnly>
            <MultiBinding Converter="{StaticResource existingToBoolConverter}">
                <Binding Path="IsExisting"/>
                <Binding Path="ID"/>
            </MultiBinding>
        </TextBox.IsReadOnly>
    </TextBox>

还有我的 ViewModel

public class ViewModel
{
    public string TextProp { get; set; }
    public bool IsExisting { get; set; }
    public int ID { get; set; }
    public ViewModel()
    {
        TextProp = "Some Text";
        IsExisting = true;
        ID = 1;
    }
}

和转换器如下:

public class IsExistToBooleanConverter : IMultiValueConverter
{

    public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (((bool)values[0]) && ((int)values[1]) != 0)
            return false;
        else
           return true;

    }

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

希望这对您有所帮助。

谢谢, 卡鲁帕萨米

【讨论】:

  • 感谢您的回复,但我需要使用 Telerik:RadGridView。由于 RadGridView 没有每个单元格的只读属性,我正在寻找替代方案。
  • IsReadOnlyBinding 是 GridViewDataColumn 的 bool 属性,你要绑定 Model 的属性对吗?那可能行得通。但如果我错了,我很抱歉造成误解。如果我有 Telerik 访问权限,我会检查这个,即使我会尝试检查。最好你尝试用这个做一个简单的示例应用程序。祝你有美好的一天:)
  • 是的,它是一个设置为列的布尔属性。我需要将属性绑定到列而不是控件,因为我有 CheckBoxcolumn、ComboBoxColumn.. 等。谢谢
  • 是的,您为什么认为,您不能将其设置为 Column(GridViewDataColumn 或 GridViewCheckBoxColumn 或其他)?您是否使用 AutogeneratingColumns 为 true ?
  • 希望应该有效,我会检查并让您知道。感谢您的帮助和时间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-25
  • 1970-01-01
  • 1970-01-01
  • 2016-01-14
  • 1970-01-01
相关资源
最近更新 更多