C# Datagrid itemsource双向数据绑定不工作
我尝试用datagrid构建一个基于wpf的应用程序,itemsource绑定到一个对象 XamlC# Datagrid itemsource双向数据绑定不工作,c#,wpf,xaml,datagrid,C#,Wpf,Xaml,Datagrid,我尝试用datagrid构建一个基于wpf的应用程序,itemsource绑定到一个对象 Xaml 整个问题就在这里,当我从一行更改内容时,它不会在集合对象上更改。我做错了什么?我可以看到您的代码中至少有以下两个问题: DataGrid从不修改ItemsSource引用本身(仅其“内容”),因此不应设置Mode=TwoWay 大多数WPF设计用于处理实现的集合数据类型绑定列表未实现此接口。因此,您最好使用实现此接口的ObservableCollection 此外, public BindingL
整个问题就在这里,当我从一行更改内容时,它不会在集合对象上更改。我做错了什么?我可以看到您的代码中至少有以下两个问题:
DataGrid
从不修改ItemsSource
引用本身(仅其“内容”),因此不应设置Mode=TwoWay
ObservableCollection
public BindingList Folders { get; set; }
似乎不正确,如果您的BindingList
是这一个:。也许应该是这样
public BindingList<Folder> Folders { get; set; }
publicbindinglist文件夹{get;set;}
但可能这只是您问题中的一个输入错误。您对数据绑定有一些混淆。以下是一些提示:
双向绑定
s用于显示并可以编辑数据绑定值的控件,而不是容器控件的属性。。。这意味着在ItemsSource
属性上设置Mode=“Two-Way”
没有意义,因为如果查看MSDN上的页面,您会发现它只支持单向绑定
如前所述,设置Mode=“Two-Way”
只能用于可以显示和编辑数据绑定值的控件。但是,如果您查看MSDN页面,应该会看到一个名为Dependency Property Information的部分。在本节中,您可以看到默认情况下,Textbox.Text
属性绑定双向
,因此您不必对其应用该设置
因此,当您说您的解决方案是使用以下方法时:
<TextBox Grid.Column="0" Text="{Binding Path, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" ... />
您的Datagrid itemsource双向数据绑定不工作标题完全无效,并且没有描述您的问题。你认为对itemsource
属性进行双向绑定
会有什么作用?你有没有试过在绑定中放置一个UpodateSourceTrigger,比如,“{Binding Folders,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}”@Bearcat9425,如果你不知道答案,不要提出建议。。。您只是在显示您缺乏数据绑定方面的知识。您认为ItemsSource属性上的双向绑定会有什么作用??或者在显示并可以编辑数据绑定值的控件上使用更新资源触发器
?双向绑定
s,而不是容器控件的属性。。。但不是TextBox
es,因为它们将Mode=TwoWay
设置为默认值(再次…从MSDN,TextBox
page)。。。始终使用MSDN。@zero\u编码,然后我会将这些有用的信息添加到答案中。
public class Folder : ObservableObject
{
private String _path;
private OsType _os;
private String _strOs;
public String Path
{
get { return _path; }
set { _path = value; RaisePropertyChanged(() => this.Path); }
}
public OsType Os
{
get { return _os; }
set { _os = value; RaisePropertyChanged(() => this.Os); }
}
public String StrOs
{
get { return _strOs; }
set { _strOs = value; RaisePropertyChanged(() => this.StrOs); }
}
}
public BindingList Folders { get; set; }
public BindingList<Folder> Folders { get; set; }
<TextBox Grid.Column="0" Text="{Binding Path, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" ... />
<TextBox Grid.Column="0" Text="{Binding Path, UpdateSourceTrigger=PropertyChanged}" ... />