WPF复选框绑定无法正常工作

时间:2016-05-02 00:01:24

标签: c# wpf xaml checkbox data-binding

我已使用我的xaml代码更新了问题。问题是listview,它位于弹出标签下。感谢大家的帮助。

Xaml代码

<Popup Name="black_list_seting" 
                   StaysOpen="False"
              AllowsTransparency="True"
                   Closed="emoj_closed"
    PlacementTarget ="{Binding ElementName=emj_btn}" 
    Placement="Left">
                <Border  HorizontalAlignment="Left" VerticalAlignment="Top"  BorderBrush="Black" BorderThickness="0.5">
                    <Grid x:Name="black_list_grid" Width="270" Height="238" Background="White" ScrollViewer.VerticalScrollBarVisibility="Visible"  >

                        <ListView  x:Name="black_listview" HorizontalAlignment="Left" Height="219"  Margin="10,10,0,0" VerticalAlignment="Top" Width="254" >

                            <ListView.View>

                                <GridView >

                                    <GridView.ColumnHeaderTemplate>
                                        <DataTemplate >
                                            <DockPanel Margin="-40,0,0,0">

                                                <TextBlock FontSize="12" HorizontalAlignment="Left" Foreground="#383e4b">
                                                    <TextBlock.Text>
                                                        <Binding/>
                                                    </TextBlock.Text>
                                                </TextBlock>
                                            </DockPanel>
                                        </DataTemplate>
                                    </GridView.ColumnHeaderTemplate>

                                    <GridViewColumn Header="name"
                DisplayMemberBinding="{Binding user_name}"
                Width="100"/>
                                    <GridViewColumn Header="ignore"
                Width="100">

                                        <GridViewColumn.CellTemplate>
                                            <DataTemplate>
                                                <CheckBox DataContext="{Binding check_key}"  IsChecked="{Binding IsSelected}" Checked="black_list_item_fn"></CheckBox>
                                            </DataTemplate>

                                        </GridViewColumn.CellTemplate>

                                    </GridViewColumn>


                                </GridView>
                            </ListView.View>






                        </ListView>



                    </Grid>
                </Border>
            </Popup>

代码

    public class contact_user_data
    {

        public string user_name { get; set; }
        public string user_key { get; set; }
        public string check_key { get; set; }
        public string head_url { get; set; }
        private bool isSelected;
        private string name;

        public bool IsSelected { get; set; }
    }

列表视图Itemssource定义代码

         var source = global_var.black_list_soruce[md5];
        if (source != black_listview.ItemsSource)
        {

        }
        black_listview.ItemsSource = null;
        //  black_listview.Items.Clear();
        black_listview.ItemsSource = source;

        black_list_seting.IsOpen = true;

无论我如何定义复选框绑定,都已取消选中。

请帮帮我!!我花了三天时间研究这个问题

1 个答案:

答案 0 :(得分:1)

查看下一个表达式:

<CheckBox DataContext="{Binding check_key}"  IsChecked="{Binding IsSelected}" Checked="black_list_item_fn"></CheckBox>

我可以说你的约束无法奏效。请注意一个小的解释:

  1. DataContext="{Binding check_key}" - 定义复选框的data context
  2. A IsChecked="{Binding IsSelected}" - 表示已检查/未检查状态由DataContext中存在的IsSelected属性定义。 由于contact_user_data类的check_key属性是一个字符串而且IsSelected不是字符串类的成员,因此我们有一个绑定表达式来破坏绑定过程,这里没有任何工作(复选框没有被绑定,因为binding expression)。
  3. 此外,您应该在此使用INPC来制作绑定以便即时工作。
  4. 我的建议是;尝试从复选框声明中删除DataContext="{Binding check_key}",然后框架将找到绑定路径,并且将至少在第一次定义状态(因为INPC未实现 - interesting article concerning the INPC must)。

    示例

    <CheckBox IsChecked="{Binding IsSelected}" Checked="black_list_item_fn"/>
    

    问候。