更具体地说,我做对了吗,因为它不起作用。我的 ViewModel 中有一个 bool 属性以及一个 TextBlock 的文本属性。如果我更改文本属性,结果会立即出现在屏幕上。所以我知道有些东西正在监听属性变化。可见性属性设置为使用布尔到可见性转换器,但该转换器永远不会被调用。我确定这只是数据绑定的一部分,我做得不对,但我已经尝试了 StackOverflow 上建议的所有内容,以及手动设置绑定和其他几件事。我在这个问题上花了超过 12 个小时,我对整个 Silverlight / MVVM 架构感到非常失望。我很兴奋,我也“想通了”。
详细信息:Silverlight 5.1.10144
App.xaml 资源:
<Application.Resources>
<vidstreams:ManagementViewModel x:Key="managementViewModel"/>
<vidstreams:VisibilityConverter x:Key="visConverter"/>
</Application.Resources>
MyView.xaml 数据上下文:
<UserControl.DataContext>
<Binding Source="{StaticResource managementViewModel}"/>
</UserControl.DataContext>
MyView.xaml 网格可见性绑定:
<Grid x:Name="LayoutRoot" Background="Black">
<Grid.RowDefinitions>
<RowDefinition Height="60"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid ...
Visibility="{Binding IsWaitingVisible, Mode=OneWay, Converter={StaticResource visConverter}}">...</Grid>
<Button x:Name="test"
Click="test_Click"
Content="test visibility"
HorizontalAlignment="Left"
Margin="0,0,0,0"
Grid.Row="1"
VerticalAlignment="Top"/>
</Grid>
MyView.xaml.cs 实例属性和 test_Click 代码:
public ManagementViewModel DataContextObject
{
get
{
return (ManagementViewModel)App.Current.Resources["managementViewModel"];
}
}
protected void test_Click(object sender, RoutedEventArgs e)
{
DataContextObject.IsWaitingVisibile = !DataContextObject.IsWaitingVisibile; //doesn't toggle the visibility or cause the converter to be hit
DataContextObject.WaitingText = "Loading data..."; //works
}
ManagementViewModel 类内部结构:
public class ManagementViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propertyName)
{
var p = PropertyChanged;
if (p != null)
{
p(this, new PropertyChangedEventArgs(propertyName));
}
}
bool mIsWaitingVisible = true;
public bool IsWaitingVisibile
{
get { return mIsWaitingVisible; }
set
{
mIsWaitingVisible = value;
OnPropertyChanged("IsWaitingVisible");
}
}
...
}
我会在这里发布转换器代码,但它甚至没有被击中。无论如何,它是一个简单的转换器,就像在本网站的各种帖子中找到的其他转换器一样。
任何想法或建议 - 或者只是确认这可能是 5 中的某种回归错误?- 将不胜感激。也许可见性绑定指令必须设置不同。请记住,TextBlock 工作正常:
<TextBlock x:Name="WaitingTextBlock"
Text="{Binding WaitingText}" .../>