新手wpf设计问题

时间:2010-12-31 20:57:00

标签: c# wpf

我使用NavigationWindow,在第一个屏幕上,用户应选择一些radio button,然后按下一个屏幕旁边的。

关于下一个屏幕上的radio button选择,我应该把所有相关图片放在那里,并为所有按钮提供相关的功能。

这样做的正确方法是什么?

winforms我会在下一个屏幕承包商中传递单选按钮值,并通过if else语句在承包商和事件函数中执行所有操作。

我已经了解了数据绑定。

你能逐步解释我应该如何实现这个......

1 个答案:

答案 0 :(得分:1)

正确的方法实际上取决于问题的复杂性。一个相当简单的方法是在应用程序启动时创建一个视图模型对象并将其放在应用程序的资源字典中,然后让每个Page的构造函数将DataContext设置为该对象。然后,您可以将页面中的控件绑定到此对象的属性,该对象基本上是整个页面集的数据上下文。

例如,在第1页上,您可能有一组单选按钮绑定到视图模型中的一组布尔属性。第2页的控件可以设置为根据这些属性的设置显示信息,例如:

<DockPanel Visibility="Collapsed">
   <DockPanel.Style>
      <Style TargetType="DockPanel">
         <Style.Triggers>
            <DataTrigger Binding="{Binding BooleanProperty1}" Value="True">
               <Setter Property="Visibility" Value="Visible"/>
            </DataTrigger>
         </Style.Triggers>
      </Style>
   </DockPanel.Style>
   <!-- controls that should appear if BooleanProperty1 is True go here -->
</DockPanel>

有很多场景不适用,但在多部分向导的相对简单的情况下,它可能就是你想要的。

一个不相关的注释,但是自从你提起它:绑定到单选按钮有一个丑陋的小设计问题。如果将组中三个单选按钮的IsChecked属性绑定到三个布尔属性,然后单击每个按钮,您将发现源中的绑定值都设置为True。发生这种情况是因为当检查组中的单选按钮时,它会明确清除组中其他按钮的IsChecked值,并且会破坏绑定。这有很好的理由,但如果你不知道它在那里,你可以花很多时间。实现绑定单选按钮的方法是将每个按钮放入其自己的组中并处理视图模型中的切换,例如:

<RadioButton Group="BooleanProperty1" IsChecked="{Binding BooleanProperty1, Mode=TwoWay}"/>
<RadioButton Group="BooleanProperty2" IsChecked="{Binding BooleanProperty2, Mode=TwoWay}"/>
<RadioButton Group="BooleanProperty3" IsChecked="{Binding BooleanProperty3, Mode=TwoWay}"/>

public bool BooleanProperty1
{
   set
   {
      if (value != _BooleanProperty1)
      {
         _BooleanProperty1 = value;
         if (value)
         {
            BooleanProperty2 = false;
            BooleanProperty3 = false;
         }
         OnPropertyChanged("BooleanProperty1");
       }
   }
}