gpt4 book ai didi

wpf - GridView 中的两种数据绑定(bind)方式

转载 作者:行者123 更新时间:2023-12-01 01:21:49 28 4
gpt4 key购买 nike

我们有一个应用程序,它使用简单的一种方式与 GridView 绑定(bind)来显示一些数据。那么,现在我们需要允许用户更改其中一些数据,所以我一直在尝试让两种方式的数据绑定(bind)在 GridView 中工作。到目前为止,一切都正确显示,但在 GridView 中编辑单元格似乎什么都不做。我在搞什么鬼?这样的双向数据绑定(bind)甚至可能吗?我是否应该开始转换所有内容以使用不同的控件,例如 DataGrid?

我编写了一个小型测试应用程序来显示我的问题。如果您尝试一下,您会发现属性 setter 在初始化后永远不会被调用。

Xaml:

    Title="Window1" Height="300" Width="300">
<Grid>
<ListView Name="TestList">
<ListView.View>
<GridView>
<GridViewColumn Header="Strings">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBox Text="{Binding Path=String, Mode=TwoWay}"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="Bools">
<GridViewColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding Path=Bool, Mode=TwoWay}"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
</Grid>
</Window>

这是相应的代码:

using System.Collections.Generic;
using System.Windows;

namespace GridViewTextbox
{
public partial class Window1 : Window
{
private List<TestRow> _rows = new List<TestRow>();

public Window1()
{
InitializeComponent();

_rows.Add(new TestRow("a", false));
_rows.Add(new TestRow("b", true));
_rows.Add(new TestRow("c", false));

TestList.ItemsSource = _rows;
TestList.DataContext = _rows;
}
}

public class TestRow : System.Windows.DependencyObject
{
public TestRow(string s, bool b)
{
String = s;
Bool = b;
}

public string String
{
get { return (string)GetValue(StringProperty); }
set { SetValue(StringProperty, value); }
}

// Using a DependencyProperty as the backing store for String. This enables animation, styling, binding, etc...
public static readonly DependencyProperty StringProperty =
DependencyProperty.Register("String", typeof(string), typeof(TestRow), new UIPropertyMetadata(""));


public bool Bool
{
get { return (bool)GetValue(BoolProperty); }
set { SetValue(BoolProperty, value); }
}

// Using a DependencyProperty as the backing store for Bool. This enables animation, styling, binding, etc...
public static readonly DependencyProperty BoolProperty =
DependencyProperty.Register("Bool", typeof(bool), typeof(TestRow), new UIPropertyMetadata(false));
}
}

最佳答案

当您使用依赖属性时,Setter 不会被绑定(bind)调用,而是直接更改值(使用 SetValue 或类似的东西)。

尝试添加一个 PropertyChangedCallback,并在其中设置断点以查看值是否从 GridView 更改。

public static readonly DependencyProperty BoolProperty =
DependencyProperty.Register("Bool", typeof(bool), typeof(TestRow), new UIPropertyMetadata(false, OnBoolChanged));
private static void OnBoolChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
{
//this method will be called everytime Bool changes value
}

关于wpf - GridView 中的两种数据绑定(bind)方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/504887/

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