【发布时间】:2016-07-04 06:04:29
【问题描述】:
我正在尝试使用带有 WPF 的 MVVM 模式将一些数据绑定到数据网格。我已经确认数据网格正在填充,并且确实填充了特定值(性别)。我还尝试了所有可以在网上找到的解决方法(包括本网站上的其他问题),这就是我在这里寻找答案的原因。
<DataGridTemplateColumn Header="Gender" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding Genders}" SelectedItem="{Binding Gender, UpdateSourceTrigger=PropertyChanged}" IsSynchronizedWithCurrentItem="True">
</ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
我尝试过的事情:Mode=TwoWay、UpdateSourceTrigger=PropertyChanged"、IsSynchronizedWithCurrentItem="True"。虽然,我不是一个经验丰富的 WPF 和 MVVM 程序员,所以它可能很简单,我只是不知道关于。我的模型似乎在其他地方工作,它们实现了 observable/在适用的情况下位于 observable 集合中。
编辑:我把它整理好了。这是适用于我的问题的代码(以防其他人遇到类似问题)。
<DataGridTemplateColumn Header="Gender" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding Path=DataContext.Genders, RelativeSource={RelativeSource FindAncestor, AncestorType = Window}}" SelectedItem="{Binding Gender, UpdateSourceTrigger=PropertyChanged}">
</ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
【问题讨论】:
-
您添加了 ComboBoxItem 元素但还尝试绑定 ItemsSource 属性似乎很奇怪。我会从您的 XAML 中删除 ComboBoxItem 条目,看看是否有帮助。
-
啊,是的。那是个很好的观点。这是尝试了很多事情的结果。好像当我删除 ComboBoxItem 的 ComboBox 是空白的。我认为这可能是问题的征兆。
-
检查 ItemsSource 是否正确绑定到您的 Genders 属性。它是否与 Gender 属性位于同一对象上?能不能在getter里面设置断点看是否被访问?
-
另外,在调试项目时检查 Visual Studio 中的输出窗口。有时绑定错误会在那里打印警告,否则会静默失败。
-
我在获取上设置了一个断点,但它似乎没有被访问。我的数据网格绑定到视图模型中患者的 Dependent 属性。 Genders 只是一个在视图模型中创建的简单字符串数组。