2013-03-25 75 views
1

我遇到了一些似乎应该很简单的问题。我来自Windows窗体并启动WPF。我想我有一个简单的语法问题,但我似乎无法找到这个单选按钮问题的具体示例。WPF if语句基于单选按钮是否被选中

我在我的GUI上有一个单选按钮,可以通过地图选择或列表运行查询。单击加载时,如果选择了地图,它应该执行一个操作,列表的操作不同。代码看起来类似于此:

private void Load_Click(object sender, RoutedEventArgs e) 
{ 
    if (rdBtnList.Checked == true) 
    { 
    //do this 
    } 

    // if rdBtnList not checked (ie if rdBtnMap is checked) 
    // do this 
} 

任何帮助将不胜感激。谢谢。

+1

而错误信息是? – mydogisbox 2013-03-25 16:30:47

+0

我不明白你在问什么,除非你问什么声明是运行第二个“这样做”,如果按钮没有被点击..在这种情况下,它是其他:D – Andy 2013-03-25 16:33:44

+0

更多的“不同的” “ //做这个。对困惑感到抱歉。 – Nallware 2013-03-25 16:48:23

回答

4

变化:

if (rdBtnList.Checked == true) 

if (rdBtnList.IsChecked == true) 

注:

I'm coming from Windows Forms and starting up with WPF

  • 你必须忘记你的一切在winforms中学习,并且拥抱MVVM。你应该创建一个ViewModel并将你的rdBtnList.IsChecked属性绑定到ViewModel中的某个布尔值,然后在那里执行你的逻辑。视图的代码不适用于应用程序逻辑。
+0

它很难忘记Windows窗体的一切。我不得不利用表单来处理一些事情(不一定是我选择的)。 – Nallware 2013-03-25 16:52:04

+1

@nallware一旦你意识到MVVM中的一切都是如此简单,你永远不会想要回到winforms。 – 2013-03-25 16:54:16

+0

是的,我认为我会默认同意,但当你被告知“这样做”时,你“这样做”。 *耸耸肩* – Nallware 2013-03-25 20:02:29

0

您是否缺少退货声明?由于是,张贴代码将始终执行,如果没有选中路径:

private void Load_Click(object sender, RoutedEventArgs e) 
{ 
    if (rdBtnList.IsChecked == true) 
    { 
    //do this 
    return; // return, or the if not checked path below will always win. 
    } 

    // if rdBtnList not checked (ie if rdBtnMap is checked) 
    // do this 
} 

在WPF中,你需要使用物业器isChecked。有关更多详细信息,请参阅RadioButton Class

1

在WPF的属性称为IsChecked因此你只需要更新if声明

if (rdBtnList.IsChecked == true) { 
    ... 
} 

IsChecked属性bool?(空值)在WPF,所以你可以在这里选择更明确的做以下

if (rdBtnList.IsChecked.HasValue && rdBtnList.IsChecked.Value) { 
    ... 
}