我有ListBox中的CheckBox列表,並且ListBox可以滾動,但是每次我在ListBox中向上或向下移動以查看其他CheckBox時Checked事件觸發。有什麼辦法可以預防它嗎?我只是希望在IsChecked發生變化時觸發該事件!在ListBox中滾動時,防止CheckBox中的onchecked事件
<ListBox Margin="0,5,0,0" Grid.Column="1" Background="Transparent"
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
ScrollViewer.VerticalScrollBarVisibility="Visible"
SelectionMode="Single" Name="lbPermission" BorderThickness="0"
HorizontalContentAlignment="Stretch" VerticalAlignment="Stretch">
<ListBox.ItemTemplate>
<DataTemplate>
<CheckBox IsEnabled="{Binding Path=IsEditable, Mode=OneWay,
RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Expander}}}"
Validation.ErrorTemplate="{x:Null}" Content="{Binding Id}"
Checked="CheckedHandler" Unchecked="CheckedHandler" >
<CheckBox.IsChecked>
<MultiBinding Converter="{StaticResource EnumConverter}"
Mode="OneWay">
<Binding Path="Id" />
<Binding Path="CurrentAccessList"
RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type Expander}}" />
</MultiBinding>
</CheckBox.IsChecked>
</CheckBox>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
我試圖使它與TowWay或使用PropertyChanged,但它沒有。
這裏是事件的代碼:
private void CheckedHandler(object sender, RoutedEventArgs e)
{
RaiseEvent(new RoutedEventArgs(OnDataModifiedEvent));
}
下面是轉換代碼:
public object Convert(object[] value, Type targetType, object parameter, CultureInfo culture)
{
try
{
// The second value in the MultiBinding should be LaborAccountAccessList
if ((value[1] as List<LaborAccountAccessList>) != null)
{
if (((IList)value[1]).Count > 0)
return (((List<LaborAccountAccessList>)value[1]).FirstOrDefault(x => x.PermissionId == value[0].ToString().ToLower()) != null) ?
!((List<LaborAccountAccessList>)value[1]).FirstOrDefault(x => x.PermissionId == value[0].ToString().ToLower()).IsObselete : false;
}
return false;
}
catch (Exception e)
{
ErrorLibrary.Instance.ErrorQueueContext.PrintError(String.Format("Unable bind the data to checkbox. Error={0}", e.ToString()));
return false;
}
}
的DataContex只是一個具有ID類的列表,並描述作爲財產。這是簡單的:
lbPermission.ItemsSource = PermissionList;
它的工作原理這種方式,還有就是我把它放在DataTemplate中創造的複選框,然後的CheckBox與檢查用轉換器的項目列表(與CurrentAccessList )如果該特定項目被檢查或沒有。 CurrentAccessList是來自DataBase的列表。
CurrentAccessList有一個bool屬性。
謝謝。
沒有足夠的代碼來重現問題。請更新問題。 – Yevgeniy
你想要我添加什麼? – Amir
您用作DataContext和EnumConverter實現的類。你也可以解釋爲什麼你需要將一個名爲CurrentAccessList的東西從擴展器傳遞給轉換器?我想幫助你,但首先我需要重現問題。所以我需要[最小,完整和可驗證的示例](https://stackoverflow.com/help/mcve) – Yevgeniy