【发布时间】:2014-02-03 03:47:00
【问题描述】:
在我的 WP8 应用程序中,我有一个类,它有一个名为 Matrix 的 ObservableCollection<ObservableCollection<int>> 属性。
我想使用项目控件显示这些矩阵。
<ItemsControl ItemsSource="{Binding FirstMatrix.Matrix}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<ItemsControl ItemsSource="{Binding}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"></StackPanel>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBox Text="{Binding}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
代码在显示方面起作用(它用零填充,这是默认值)。但我也希望允许更改文本框,这将反映在 Matrix 属性中 - 现在无法更改文本框,因为我猜它们的值以一种方式绑定到 Matrix 单元格。我尝试设置<TextBox Text="{Binding Mode=TwoWay}" />或类似的东西,但它似乎不起作用。
任何想法应该如何绑定数据?
编辑: 我已经实现了 INotifyPropertyChanged。 这是我课堂的一部分:
public partial class CalcMatrix : INotifyPropertyChanged
{
public ObservableCollection<ObservableCollection<int>> Matrix
{
get { return _matrix; }
set
{
_matrix = value;
OnPropertyChanged("Matrix");
}
}
private ObservableCollection<ObservableCollection<int>> _matrix;
private void OnPropertyChanged(string argName)
{
var handler = PropertyChanged;
if(handler != null)
handler(this, new PropertyChangedEventArgs(argName));
}
public event PropertyChangedEventHandler PropertyChanged;
}
我认为 TexBoxes 不改变的原因是因为绑定是单向的 - 文本始终是矩阵内部的内容。我相信我应该以某种方式将 XAML 绑定更改为 TwoWay 或其他东西,但不知道如何。有什么想法吗?
【问题讨论】:
-
"public ObservableCollection
> matrix" .. 它是一个属性,但它不是像字符串或整数这样的原始数据类型,它是一个集合。
标签: xaml data-binding mvvm windows-phone-8 observablecollection