无法将'string'类型的表达式转换为'ScatterView'类型

时间:2012-07-13 11:57:00

标签: c# wpf xaml mvvm pixelsense

我有一个SurfaceRadioButton,必须更改ScatterView可见性(scatterViewCoordinates)

首先,我所做的是改变对象的可见性()

private void CoordinatesChecked(object sender, RoutedEventArgs e)
{
    scatterViewCoordinates.Visibility = Visibility.Visible;
}

之后我修改了XAML代码,并在SurfaceRadioButton的Tag值中包含了ScatterView的名称。

<s:SurfaceRadioButton Name="Coordinates" Content="Coordinates"
                      Checked="CoordinatesChecked" Tag="scatterViewCoordinates" />

现在我试图将SurfaceRadioButton中包含的Tag值转换为ScatterView,然后调用Visibility方法。

private void CoordinatesChecked(object sender, RoutedEventArgs e)
{
    string senderName = ((SurfaceRadioButton)sender).Tag.ToString();
    ((ScatterView)senderName).Visibility = Visibility.Hidden;
}

我收到此错误

Cannot cast expression of type 'string' to type 'ScatterView'

解决这个问题的任何想法(如果尊重MVVM概念,我现在都不知道了吗?)

也欢迎提出建议。

2 个答案:

答案 0 :(得分:4)

很明显为什么这不起作用,你不能只是将对象的名称强制转换为它本身引用的对象。程序无法知道字符串的含义

如何传递对象:

Tag="{Binding ElementName=scatterViewCoordinates}"
var view = (ScatterView)((SurfaceRadioButton)sender).Tag;

答案 1 :(得分:1)

您正尝试将“senderName”(这是一个字符串)强制转换为ScatterView,就像错误所说的那样。您需要根据名称查找ScatterView,然后设置其可见性。