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。 我怀疑我可以使用枚举转换器,因为单选按钮的数量总是动态的。

所以我只想澄清,在第一次执行时没有单选按钮被选中,但点击后的单选按钮做工精细。视图模型和底层数据库反映了所做的更改。

?我怎样才能单选按钮在启动时显示值?

欢呼声。

+1

你需要显示视图模型被创建时的额外的代码。根据你所说的猜测,我会说布尔没有在启动时设置一个值,所以只是默认为False。 – Harry 2011-05-03 12:52:07

+0

对不起,它从业务对象中获取它并且调试显示了一个真正的值。我将更新代码以显示它。 – BastanteCaro 2011-05-03 12:54:23

+0

好的。截至目前,我已将单选按钮更改为复选框。这并不能真正为我提供所需的功能,但至少会在数据加载时显示正确选择的项目。 – BastanteCaro 2011-05-04 12:20:11

我已经创建了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>