在 Silverlight RIA 中绑定到数据网格的 itemsource 时通知属性更改

发布于 2024-10-18 09:18:37 字数 351 浏览 1 评论 0原文

我在 silverlight 项目中有一个文本框和一个数据网格。如果数据网格中的项目计数为 0 或数据网格 itemssource 中的字段总和 = 0,则应启用文本框。

我已将文本框的 isEnabled 值绑定到数据网格 ItemsSource.SourceCollection,这给了我一个 IEnumerable。我制作了一个转换器,可以将此数据模型转换为布尔值。

当我打开 silverlight 页面并绑定数据网格时,转换器会运行并且一切都按预期工作,但如果我更改总和字段或在数据网格中添加/删除行,则不会发生任何情况。

我猜这与我的数据模型上的通知属性更改有关,但我不知道。

关于如何解决这个问题有什么想法吗?

I have a textbox and a datagrid in a silverlight project. The textbox should be enabled if the item count in the datagrid is 0 or the sum of a field in the datagrids itemssource = 0.

I've bound the isEnabled value of the textbox to the datagrids ItemsSource.SourceCollection which gives me an IEnumerable. I've made a converter that converts this datamodel to bool.

When I open my silverlight page and bind the datagrid, the converter runs and everything i working as expected, but nothing happens if i change the sum field or add/delete rows in the datagrid.

I'm guessing it has something to do with notify property changes on my datamodel, but I don't know.

Any thoughts on how to solve this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

挽你眉间 2024-10-25 09:18:37

我问了类似的问题,Luc 回答说你需要 INotifyPropertyChanged 事件实现,如果没有,项目更改将不会发生。
如何根据 SL4 中另一个单元格的内容使数据网格中的单元格只读?

I asked similar question and as Luc answered you need have INotifyPropertyChanged event implementation, if not item changes will not happen.
How to make a cell in a datagrid readonly based the content on another cell in SL4?

初心未许 2024-10-25 09:18:37

是的,当您绑定到对象的子属性时,您需要该特定属性的 PropertyChanged 事件,以便目标更新其值。

在您的示例中,ItemsSource 需要引发属性 SourceCollection 的 PropertyChanged 事件。

您可以做的是绑定到将被触发的 ItemsSource,然后在转换器中使用 Sourcecollection 值。

例如:

    <sdk:DataGrid Name="dg" ItemsSource="{Binding}" AutoGenerateColumns="True" VerticalAlignment="Top"/>
    <TextBox Text="{Binding ElementName=dg, Path=ItemsSource.Count}" VerticalAlignment="Bottom" HorizontalAlignment="Right"/>

代码:

        _items = new ObservableCollection<SomeClass>();
        _items.Add(new SomeClass() { Name = "a" });
        _items.Add(new SomeClass() { Name = "b" });
        _items.Add(new SomeClass() { Name = "c" });

        DataContext = _items;

    private void testButton_Click(object sender, RoutedEventArgs e)
    {
        _items.Add(new SomeClass(){Name = "ha"});

    }

Yes, when you bind to a sub property of an object then you need a PropertyChanged event of that specific property in order for the target to update its value.

In your example the ItemsSource needs to raise a PropertyChanged event of the property SourceCollection.

What you could do is bind to ItemsSource wich will be triggered and then in your converter use the Sourcecollection value.

eg:

    <sdk:DataGrid Name="dg" ItemsSource="{Binding}" AutoGenerateColumns="True" VerticalAlignment="Top"/>
    <TextBox Text="{Binding ElementName=dg, Path=ItemsSource.Count}" VerticalAlignment="Bottom" HorizontalAlignment="Right"/>

code:

        _items = new ObservableCollection<SomeClass>();
        _items.Add(new SomeClass() { Name = "a" });
        _items.Add(new SomeClass() { Name = "b" });
        _items.Add(new SomeClass() { Name = "c" });

        DataContext = _items;

    private void testButton_Click(object sender, RoutedEventArgs e)
    {
        _items.Add(new SomeClass(){Name = "ha"});

    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文