Windows Phone 7 - 在列表框中切换开关

Posted

技术标签:

【中文标题】Windows Phone 7 - 在列表框中切换开关【英文标题】:Windows Phone 7 - Toggle switch in list box 【发布时间】:2014-09-21 22:10:05 【问题描述】:

在一组拨动开关中,我无法单独控制任何拨动开关,如果我尝试更改一个,那么所有值都会同时更改。

我的 Xaml:-

    <ListBox HorizontalAlignment="Left" ScrollViewer.VerticalScrollBarVisibility="Disabled" Margin="0,0,0,0" Name="yourChoiceListBox" VerticalAlignment="Top" Width="476" ItemsSource="Binding yourChoiceList, Mode=TwoWay">
                                    <ListBox.ItemTemplate>
                                        <DataTemplate>
                                            <Border BorderBrush="Gray" BorderThickness="1">

                                                <StackPanel Orientation="Horizontal" HorizontalAlignment="Left" VerticalAlignment="Center" Width="476" Height="60">
                                                    <TextBlock Margin="10,0,0,0" FontSize="24" FontWeight="SemiBold" Foreground="Black" Width="250" Text="Binding title" VerticalAlignment="Center" Height="35" TextTrimming="WordEllipsis" />
                                                    <TextBlock FontSize="24" FontWeight="SemiBold" Foreground="Black" Width="150" Text="Binding valueDesc" HorizontalAlignment="Right" FlowDirection="RightToLeft" VerticalAlignment="Center" Visibility="Binding valueVisible" />
<toolkit:ToggleSwitch x:Name="toggle" Foreground="Black" Content="Binding toggleContent" IsChecked="Binding DataContext.isCheck,ElementName=yourChoiceListBox,Mode=TwoWay"  Height="110" Width="198" HorizontalAlignment="Right" Margin="40,-15,0,0" Visibility="Binding tongleVisible" />
                                                </StackPanel>
                                            </Border>
                                        </DataTemplate>
                                    </ListBox.ItemTemplate>
                                </ListBox>

我的 ViewModel CS:-

  public static string _toggleContent;
        public string toggleContent
        
            get  return _toggleContent; 
            set  this.RaiseAndSetIfChanged(x => x.toggleContent, value); 
        

        public static bool _isCheck;
        public bool isCheck
        
            get  return _isCheck; 
            set
            
                this.RaiseAndSetIfChanged(x => x.isCheck, value);
                if (isCheck)
                    toggleContent = "Yes";
                else
                    toggleContent = "No";
            
        

在这里,我想将切换开关的内容更改为“是”或“否”。如果我选择“开”,则内容应为“是”。但是在这里,如果我选择一个拨动开关,所有拨动开关都会改变。请让我有任何想法来解决我的问题。提前致谢。

【问题讨论】:

你的 IsChecked 属性绑定错误,它不应该绑定在列表框上,而是绑定在数据项上 嗨@csharpwinphonexaml.. 请举个例子? 查看我为你写的答案 【参考方案1】:

这是你的切换开关:

<toolkit:ToggleSwitch x:Name="toggle" Foreground="Black" Content="Binding toggleContent" 
    IsChecked="Binding DataContext.isCheck,ElementName=yourChoiceListBox,Mode=TwoWay"  
    Height="110" Width="198" HorizontalAlignment="Right" Margin="40,-15,0,0" 
    Visibility="Binding tongleVisible" />

问题出在这里:

IsChecked="Binding DataContext.isCheck,ElementName=yourChoiceListBox,Mode=TwoWay"  

您正在将ToggleSwitchIsChecked 属性绑定到您的列表isCheck 属性。

您应该像这样将ToggleSwitchIsChecked 属性绑定到您的列表项isCheck 属性:

IsChecked="Binding isCheck, Mode=TwoWay"  

【讨论】:

但是这里我不能改变内容。默认内容为开/关。但我想改变是/否。如果我正常使用拨动开关,我可以更改内容。如果我使用列表框中的切换,我无法更改内容。请告诉我任何想法。 将你的对象设为INotifyPropertyChanged,它会自动自动完成 嗨@csharpwinphonexaml .. 感谢您的回复。对于INotifyPropertyChanged,我使用的是reactive Object。实际上我的要求是我想为 ListBox 内的拨动开关编写事件。有这方面的例子吗? 我可以仔细看看整个事情吗? 在 ***@robyapps.com 上给我写信

以上是关于Windows Phone 7 - 在列表框中切换开关的主要内容,如果未能解决你的问题,请参考以下文章

在Windows Phone 8的列表框中绑定列表框

如何在windows phone 8的列表框中添加页脚

无法连续两次从列表框中选择相同的项目 - windows phone 8 C#

在 windows phone 7.5 中使用拖动事件在网格中切换矩形

下拉列表 Windows Phone 7

如何检测到 UI 元素(全景和列表框)的数据绑定何时在 windows phone 7 中完成?