按钮绑定不起作用

时间:2015-02-04 06:31:29

标签: silverlight button telerik-grid radgridview

RadGridView 中的 RadButton 控件,其功能与切换按钮相同(打开嵌套网格)。

<telerik:RadButton x:Name="expand" Width="20" Content="+" Tag="{Binding Mode=OneWay}" Click="btnExpand_Click" />

btnExpand_Click ”功能

 private void btnExpand_Click(object sender, RoutedEventArgs e)
    {
        RadButton btn = sender as RadButton;
        if (btn.Content.Equals("+") && flagRowSelected == true)
        {
            flagRowSelected = false;
            if (signButton != null)
            {

                signButton.Content = "+";
            }
            btn.Content = "-";
            grd.RowDetailsVisibilityMode = Telerik.Windows.Controls.GridView.GridViewRowDetailsVisibilityMode.VisibleWhenSelected;

        }
        else
        {

            flagRowSelected = true;
            btn.Content = "+";
            grd.RowDetailsVisibilityMode = Telerik.Windows.Controls.GridView.GridViewRowDetailsVisibilityMode.Collapsed;

        }
        signButton = btn;
    }

我在这里遇到两个问题。

1)我明确选择任何一行,然后点击“+”按钮。此代码工作正常,其嵌套网格变为可见,但按钮内容不会更改为“ - ”

2)如果我没有明确选择任何行,请点击“+”按钮。此代码不起作用,其嵌套网格不可见。

任何形式的帮助都将受到赞赏。

1 个答案:

答案 0 :(得分:1)

我可以看到代码的几个问题,不知道从哪里开始。让我们从signButton开始:你将它设置为最后一个语句(并且在某一点甚至之前设置了它的内容),但你再也不会读它了。因此,使用signButton毫无意义。如果你需要存储RowDetails是否扩展,为什么不使用bool?

第二:你将rowDetailsVisibility设置为VisibleWhenSelected,因此当没有选择行时,按钮上的点击不会显示rowDetails。

第三:为什么你甚至首先使用RadButton?您需要一个具有两种不同状态的按钮,因此ToggleButton似乎是自然的选择。

从你显示的xaml行我说你为网格提供某种自定义模板,也许是一个行模板,所以我假设你可以自由地使用RowDetails扩展器按钮的任何控件?

好吧,使用ToggleButton可能没有什么好处,不确定。

我改变了你的代码,也许你看看这个并尝试一下:

private void btnExpand_Click(object sender, RoutedEventArgs e)
{
    ButtonBase btn = sender as ButtonBase;
    if (btn.Content.Equals("+"))
    {
        btn.Content = "-";
        grd.RowDetailsVisibilityMode =
            GridViewRowDetailsVisibilityMode.VisibleWhenSelected;
        var correspondingRow = btn.GetAncestor<GridRow>();
        correspondingRow.Selected = true;

    }
    else
    {

        btn.Content = "+";
        grd.RowDetailsVisibilityMode = GridViewRowDetailsVisibilityMode.Collapsed;

    }
}

寻找某种类型的祖先:

public static class ControlExtensions
{
    public static TAncestor GetAncestor<TAncestor>( this DependencyObject subElement )
        where TAncestor : DependencyObject
    {
        return subElement.GetAncestor<TAncestor>( potentialAncestorToStopTheSearch: null );
    }

    public static TAncestor GetAncestor<TAncestor>( this DependencyObject subElement, UIElement potentialAncestorToStopTheSearch )
        where TAncestor : DependencyObject
    {
        DependencyObject parent;
        for (DependencyObject subControl = subElement; subControl != null; subControl = parent)
        {
            if (subControl is TAncestor) return (TAncestor) subControl;

            if (object.ReferenceEquals( subControl, potentialAncestorToStopTheSearch )) return null;


            parent = VisualTreeHelper.GetParent( subControl );
            if (parent == null)
            {
                FrameworkElement element = subControl as FrameworkElement;
                if (element != null)
                {
                    parent = element.Parent;
                }
            }
        }
        return null;
    }
}