gpt4 book ai didi

Xaml 两种方式将文本框绑定(bind)到可观察集合

转载 作者:行者123 更新时间:2023-12-03 10:28:43 24 4
gpt4 key购买 nike

在我的 WP8 应用程序中,我有一个类,它有一个 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>

代码就显示而言有效(它用默认值填充零)。但我也希望允许更改文本框,这将反射(reflect)在 Matrix 属性中 - 现在无法更改文本框,因为我猜它们的值以一种方式绑定(bind)到 Matrix 单元格。我尝试设置 <TextBox Text="{Binding Mode=TwoWay}" />或类似的东西,但它似乎不起作用。
任何想法应该如何绑定(bind)数据?

编辑:
我已经实现了 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 不改变的原因是因为绑定(bind)是单向的 - 文本始终是矩阵内部的内容。我相信我应该以某种方式将 XAML 绑定(bind)更改为 TwoWay 或其他东西,但不知道如何。有任何想法吗 ?

最佳答案

双向模式绑定(bind)需要路径(为什么? see this SO answer ),所以你不能像 {Binding Mode=TwoWay} 那样做,它必须类似于 {Binding SomePath, Mode=TwoWay} .因此,在这种情况下,您必须将矩阵项包装为某个类而不是普通的 int,并将该 int 作为该类的属性值。

//your Matrix property type become:
...
public ObservableCollection<ObservableCollection<MatrixElement>> Matrix
...

//MatrixElement class is something like:
public class MatrixElement : INotifyPropertyChanged
{
private int _value;
public int Value
{
get { return _value; }
set {
_value = value;
OnPropertyChanged("Value");
}
}

....
}

//then you can bind TextBox in two way mode
...
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBox Text="{Binding Value, Mode=TwoWay}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
...

关于Xaml 两种方式将文本框绑定(bind)到可观察集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21124473/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com