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"
您正在将ToggleSwitch
的IsChecked
属性绑定到您的列表 的isCheck
属性。
您应该像这样将ToggleSwitch
的IsChecked
属性绑定到您的列表项 的isCheck
属性:
IsChecked="Binding isCheck, Mode=TwoWay"
【讨论】:
但是这里我不能改变内容。默认内容为开/关。但我想改变是/否。如果我正常使用拨动开关,我可以更改内容。如果我使用列表框中的切换,我无法更改内容。请告诉我任何想法。 将你的对象设为INotifyPropertyChanged
,它会自动自动完成
嗨@csharpwinphonexaml .. 感谢您的回复。对于INotifyPropertyChanged
,我使用的是reactive Object
。实际上我的要求是我想为 ListBox 内的拨动开关编写事件。有这方面的例子吗?
我可以仔细看看整个事情吗?
在 ***@robyapps.com 上给我写信以上是关于Windows Phone 7 - 在列表框中切换开关的主要内容,如果未能解决你的问题,请参考以下文章
无法连续两次从列表框中选择相同的项目 - windows phone 8 C#