WPF MVVM单选按钮绑定不是从视图模型
我有相当多的麻烦单选按钮组设置初始值。最初,单选按钮不会设置ViewModel的值,但是选择的功能正确。所以基本上用户不知道什么是初始值。WPF MVVM单选按钮绑定不是从视图模型
这里是我的XAML。
<ListBox ItemsSource="{Binding ViewModelCollection}">
<ListBox.ItemTemplate>
<DataTemplate>
<RadioButton GroupName="rbList" IsChecked="{Binding Path=IsReady,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}">
<Label Content="{Binding Path=NameOfRadioButton}"></Label>
</RadioButton>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
,这里是我的ViewModel
public bool IsReady
{
get
{
return BusinessObject.IsReady; // debuggin on this line shows a true value being returned
}
set
{
BusinessObject.IsReady = value;
OnPropertyChanged("IsReady");
}
}
视图模型是一个简单的布尔值什么实现INotifyPropertyChanged。 我怀疑我可以使用枚举转换器,因为单选按钮的数量总是动态的。
所以我只想澄清,在第一次执行时没有单选按钮被选中,但点击后的单选按钮做工精细。视图模型和底层数据库反映了所做的更改。
?我怎样才能单选按钮在启动时显示值?
欢呼声。
我已经创建了ViewModelCollection作为ObservableCollection与ViewModel的ctor中的测试对象,它适用于我,所以我认为你应该从数据库中提取数据和ViewModelCollection的RaisePropertyChanged。
有同样的问题与使用WPF工具箱主题(http://wpf.codeplex.com/)。我比较了CheckBox(工作)和RadioButton(没有工作)的控件模板。 IsChecked值的触发器设置为与复选框相反,它会查找“false”,然后在退出时执行选中的动画,其中复选框查找true。
当单选按钮在呈现之前被绑定时,这会导致问题,因为该值已经为true,设置选中的视觉状态的动画将不会触发,直到您选中另一个框以使其为false。
我修复了单选按钮主题,使其遵循与复选框相同的可视状态逻辑。我不确定这是否会打破单选按钮的其他功能,但它似乎目前工作正常。
我同意user2174874提供了答案。我想要做的就是添加xaml代码,使事情变得顺利。
有问题的代码:
<Trigger Property="IsChecked" Value="false">
<Trigger.ExitActions>
<BeginStoryboard x:Name="CheckedOn_BeginStoryboard" Storyboard="{StaticResource CheckedOn}" />
</Trigger.ExitActions>
<Trigger.EnterActions>
<BeginStoryboard x:Name="CheckedOff_BeginStoryboard" Storyboard="{StaticResource CheckedOff}" />
</Trigger.EnterActions>
</Trigger>
<Trigger Property="IsChecked" Value="True" />
更正代码:
<Trigger Property="IsChecked" Value="True">
<Trigger.ExitActions>
<BeginStoryboard x:Name="CheckedOff_BeginStoryboard" Storyboard="{StaticResource CheckedOff}" />
</Trigger.ExitActions>
<Trigger.EnterActions>
<BeginStoryboard x:Name="CheckedOn_BeginStoryboard" Storyboard="{StaticResource CheckedOn}" />
</Trigger.EnterActions>
</Trigger>
你需要显示视图模型被创建时的额外的代码。根据你所说的猜测,我会说布尔没有在启动时设置一个值,所以只是默认为False。 – Harry 2011-05-03 12:52:07
对不起,它从业务对象中获取它并且调试显示了一个真正的值。我将更新代码以显示它。 – BastanteCaro 2011-05-03 12:54:23
好的。截至目前,我已将单选按钮更改为复选框。这并不能真正为我提供所需的功能,但至少会在数据加载时显示正确选择的项目。 – BastanteCaro 2011-05-04 12:20:11