C# 双向绑定不起作用

C# 双向绑定不起作用,c#,.net,wpf,binding,C#,.net,Wpf,Binding,我的窗口的XAML: <ListView Grid.Row="0" Name="files"> <ListView.Resources> <DataTemplate x:Key="CheckboxTemplate"> <CheckBox IsChecked="{Binding Save, Mode=TwoWay}" /> </DataTemplat

我的窗口的XAML:

<ListView Grid.Row="0" Name="files">
        <ListView.Resources>
            <DataTemplate x:Key="CheckboxTemplate">
                <CheckBox IsChecked="{Binding Save, Mode=TwoWay}" />
            </DataTemplate>
        </ListView.Resources>
        <ListView.View>
            <GridView AllowsColumnReorder="False">
                <GridViewColumn Header=" " Width="30" CellTemplate="{StaticResource CheckboxTemplate}" />
                <GridViewColumn Header="Datei" DisplayMemberBinding="{Binding File}"/>
            </GridView>
        </ListView.View>
    </ListView>
我叫窗户。窗口出现。我取消选中listview项目的复选框。我点击一个按钮。在它的事件处理程序中,我读取了listview的itemssource并。。。未选中项的Save属性(在其源中)仍然为true


我的错在哪里?如果我选中/取消选中复选框,为什么我的源代码不会得到更新?

您还没有设置数据上下文。如果您都在同一个类中,请在窗口的构造函数中放入类似的内容

DataContext = this;

我认为您需要将DataContext设置为隐藏的代码,然后为清晰起见绑定到路径

XAML设置窗口数据上下文

  DataContext="{Binding RelativeSource={RelativeSource Self}}"

尝试将IEnumerable转换为list。。 不建议使用IEnumerable作为项源,尤其是在使用Linq评估项源时

List<SaveItem> sil = sdl.Select(d => new SaveItem() { Save = true, Document = d }).ToList<SaveItem>();
files.ItemsSource = sil;
listsil=sdl.Select(d=>newsaveitem(){Save=true,Document=d}).ToList();
files.ItemsSource=sil;

PS-您可以使用名为“Snoop”的程序连接到正在运行的程序,并检查数据绑定错误。如果您这样做-您将在窗口上看到数据上下文,并且所有子元素可能都为空。在代码中,来自tsells的答案是正确的。对于我来说,如果要在XAML中设置路径,那么应该在XAML中设置DataContext。
  DataContext="{Binding RelativeSource={RelativeSource Self}}"
List<SaveItem> sil = sdl.Select(d => new SaveItem() { Save = true, Document = d }).ToList<SaveItem>();
files.ItemsSource = sil;