Telerik 针对 UWP 的 RadDataGrid 单元格内容文本框绑定
Telerik's RadDataGrid cell content textbox binding for UWP
我们在网格中使用了 DataGridTemplateColumn 来显示列的文本框。通过 Prism MVVM,如果文本框值已更改,我们需要更新网格中的其他列。
前任。当我更新 data1 列时,我的 RadDataGrid 中有 3 列,
data3 列将自动更新(data1 文本框值 + data2 值)。
感谢帮助~
<telerikGrid:RadDataGrid
x:Name="DataGrid"
ItemsSource="{x:Bind ViewModel.DataList,Mode=TwoWay}">
<telerikGrid:RadDataGrid.Columns>
<telerikGrid:DataGridTemplateColumn Header="Data1" >
<telerikGrid:DataGridTemplateColumn.CellContentTemplate>
<DataTemplate>
<TextBox Text="{Binding Data1, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Left" VerticalAlignment="Center" MinWidth="100" />
</DataTemplate>
</telerikGrid:DataGridTemplateColumn.CellContentTemplate>
</telerikGrid:DataGridTemplateColumn>
<telerikGrid:DataGridTextColumn Header="Data2" PropertyName="Data2" CanUserResize="False"/>
<telerikGrid:DataGridTextColumn Header="Data3" PropertyName="Data3" CanUserResize="False"/>
ex. I have 3 columns in my RadDataGrid, when I updated data1 column, data3 column will be auto updated (data1 textbox value + data2 value).
根据您的要求,您可以创建包含 Data1
Data2
Data3
三个属性的 Item
class,如下所示。
public class Item : INotifyPropertyChanged
{
private string _data1;
public string Data1
{
get
{
return _data1;
}
set
{
_data1 = value;
this.Data3 = Data1 + Data2;
OnPropertyChanged();
}
}
private string _data2;
public string Data2
{
get
{
return _data2;
}
set
{
_data2 = value;
OnPropertyChanged();
}
}
private string _data3;
public string Data3
{
get
{
return _data1 + _data2;
}
set
{
_data3 = value;
OnPropertyChanged();
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged([CallerMemberName] string PropertyName = null)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(PropertyName));
}
}
}
关键是你需要修改Data1的set
方法中的值Data3
。当你输入一些单词修改Data1的值时,Data3
会自动改变。
这是 code sample 你可以参考。
我们在网格中使用了 DataGridTemplateColumn 来显示列的文本框。通过 Prism MVVM,如果文本框值已更改,我们需要更新网格中的其他列。 前任。当我更新 data1 列时,我的 RadDataGrid 中有 3 列, data3 列将自动更新(data1 文本框值 + data2 值)。
感谢帮助~
<telerikGrid:RadDataGrid
x:Name="DataGrid"
ItemsSource="{x:Bind ViewModel.DataList,Mode=TwoWay}">
<telerikGrid:RadDataGrid.Columns>
<telerikGrid:DataGridTemplateColumn Header="Data1" >
<telerikGrid:DataGridTemplateColumn.CellContentTemplate>
<DataTemplate>
<TextBox Text="{Binding Data1, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Left" VerticalAlignment="Center" MinWidth="100" />
</DataTemplate>
</telerikGrid:DataGridTemplateColumn.CellContentTemplate>
</telerikGrid:DataGridTemplateColumn>
<telerikGrid:DataGridTextColumn Header="Data2" PropertyName="Data2" CanUserResize="False"/>
<telerikGrid:DataGridTextColumn Header="Data3" PropertyName="Data3" CanUserResize="False"/>
ex. I have 3 columns in my RadDataGrid, when I updated data1 column, data3 column will be auto updated (data1 textbox value + data2 value).
根据您的要求,您可以创建包含 Data1
Data2
Data3
三个属性的 Item
class,如下所示。
public class Item : INotifyPropertyChanged
{
private string _data1;
public string Data1
{
get
{
return _data1;
}
set
{
_data1 = value;
this.Data3 = Data1 + Data2;
OnPropertyChanged();
}
}
private string _data2;
public string Data2
{
get
{
return _data2;
}
set
{
_data2 = value;
OnPropertyChanged();
}
}
private string _data3;
public string Data3
{
get
{
return _data1 + _data2;
}
set
{
_data3 = value;
OnPropertyChanged();
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged([CallerMemberName] string PropertyName = null)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(PropertyName));
}
}
}
关键是你需要修改Data1的set
方法中的值Data3
。当你输入一些单词修改Data1的值时,Data3
会自动改变。
这是 code sample 你可以参考。