Data binding 交互式WPF关系数据网格系统示例?
我想知道是否有人可以分享或指出可以在Silverlight应用程序中使用的datagrid结构的良好示例。我需要有4个关系数据网格,其中一个是主数据网格,主数据网格拥有大部分数据。我应该能够删除或添加或更改项目的属性。此更改还应影响其他数据网格。例如,如果我从主数据网格中删除一个项,那么该项的实例应该从其他数据网格中删除。非常感谢您提供的任何信息。提前谢谢你 我之前创建了一个与您所寻找的类似的原型。我没有使用DataGrid,实际上我使用的是ItemsControl,但我认为它可能对您有益 我所做的是让我的两个ItemsControl查看相同的数据。这样,如果我删除一个对象,它也会从另一个对象中删除(因为它是相同的数据源) 使用MVVM模式,我是这样处理的 首先,这是两个网格的外观,它们都显示相同数据的不同表示形式 这是我的主页.xamlData binding 交互式WPF关系数据网格系统示例?,data-binding,silverlight-4.0,datagrid,Data Binding,Silverlight 4.0,Datagrid,我想知道是否有人可以分享或指出可以在Silverlight应用程序中使用的datagrid结构的良好示例。我需要有4个关系数据网格,其中一个是主数据网格,主数据网格拥有大部分数据。我应该能够删除或添加或更改项目的属性。此更改还应影响其他数据网格。例如,如果我从主数据网格中删除一个项,那么该项的实例应该从其他数据网格中删除。非常感谢您提供的任何信息。提前谢谢你 我之前创建了一个与您所寻找的类似的原型。我没有使用DataGrid,实际上我使用的是ItemsControl,但我认为它可能对您有益 我所
<UserControl x:Class="ViewModelDeleteObject.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:ViewModelDeleteObject"
xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="400">
<UserControl.DataContext>
<local:MainPage_ViewModel/>
</UserControl.DataContext>
<StackPanel Orientation="Horizontal">
<ItemsControl ItemsSource="{Binding Coordinates}" Margin="20">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border BorderBrush="Blue" BorderThickness="1">
<StackPanel Orientation="Horizontal" Margin="3">
<Border BorderBrush="Red" BorderThickness="1">
<TextBlock Text="{Binding X}" TextAlignment="Right" Width="100" Margin="3"/>
</Border>
<Border BorderBrush="Red" BorderThickness="1">
<TextBlock Text="{Binding Y}" TextAlignment="Right" Width="100" Margin="3"/>
</Border>
<Button Content="Delete" Click="Button_Click" Tag="{Binding}"/>
</StackPanel>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<ItemsControl ItemsSource="{Binding Coordinates}" Margin="20">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border BorderBrush="Blue" BorderThickness="1">
<Border BorderBrush="Red" BorderThickness="1">
<TextBlock Text="{Binding XYCoordinate}" TextAlignment="Right" Width="100" Margin="3"/>
</Border>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
MainPage.xaml将以下MainPage_ViewModel.cs设置为其DataContext:
public class MainPage_ViewModel : INotifyPropertyChanged
{
public MainPage_ViewModel()
{
coordinates.Add(new Coordinate_DataViewModel(new Coordinate_Model() { X = 1, Y = 2 }));
coordinates.Add(new Coordinate_DataViewModel(new Coordinate_Model() { X = 2, Y = 4 }));
coordinates.Add(new Coordinate_DataViewModel(new Coordinate_Model() { X = 3, Y = 6 }));
coordinates.Add(new Coordinate_DataViewModel(new Coordinate_Model() { X = 4, Y = 8 }));
coordinates.Add(new Coordinate_DataViewModel(new Coordinate_Model() { X = 5, Y = 10 }));
coordinates.Add(new Coordinate_DataViewModel(new Coordinate_Model() { X = 6, Y = 12 }));
}
public ObservableCollection<Coordinate_DataViewModel> Coordinates
{
get { return coordinates; }
set
{
if (coordinates != value)
{
coordinates = value;
OnPropertyChanged("Coordinates");
}
}
}
private ObservableCollection<Coordinate_DataViewModel> coordinates = new ObservableCollection<Coordinate_DataViewModel>();
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
public void DeleteCoordinate(Coordinate_DataViewModel dvmToDelete)
{
coordinates.Remove(dvmToDelete);
}
}
数据视图模型
public class Coordinate_DataViewModel
{
public Coordinate_DataViewModel(Coordinate_Model model)
{
this.underlyingModel = model;
}
private Coordinate_Model underlyingModel;
public double X
{
get { return underlyingModel.X; }
set { underlyingModel.X = value; }
}
public double Y
{
get { return underlyingModel.Y; }
set { underlyingModel.Y = value; }
}
public string XYCoordinate
{
get { return "(" + X + "," + Y + ")"; }
}
}
现在,当我从第一个网格中删除一行时,第二个网格立即更新,如下所示,我删除了4,8:
我认为这可能与你的想法相似。希望有帮助:)
注意:所有代码都在这里,所以如果您愿意,您应该能够复制粘贴并执行自己的代码
更新:此解决方案是用Silverlight编写的,但我注意到您的问题是“WPF”,其标记为Silverlight。即使您使用的是WPF,这个示例也应该是有益的。对不起强>
更新:好的,我将更新它以使用DataGrid。这实际上花了我两分钟来实现前面给出的代码。唯一需要更改的是视图,请注意没有涉及其他代码。
以下是视图中的新项目:
<data:DataGrid ItemsSource="{Binding Coordinates}" AutoGenerateColumns="False" Margin="10">
<data:DataGrid.Columns>
<data:DataGridTextColumn Header="X Position" Width="100" Binding="{Binding X}"/>
<data:DataGridTextColumn Header="Y Position" Width="100" Binding="{Binding Y}"/>
<data:DataGridTemplateColumn Header="Delete Item" Width="100">
<data:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Content="Delete" Tag="{Binding}" Click="Button_Click"/>
</DataTemplate>
</data:DataGridTemplateColumn.CellTemplate>
</data:DataGridTemplateColumn>
</data:DataGrid.Columns>
</data:DataGrid>
<data:DataGrid ItemsSource="{Binding Coordinates}" AutoGenerateColumns="False" Margin="10">
<data:DataGrid.Columns>
<data:DataGridTextColumn Header="Coordinate" Width="100" Binding="{Binding XYCoordinate}"/>
</data:DataGrid.Columns>
</data:DataGrid>
以下是初始网格的外观:
以下是删除后的外观:
谢谢您的样品。是的,我特别想找Silverlight。为什么在构建应用程序时没有使用datagrid?我想知道原因是什么。我会尝试你的代码,并会让你知道它将与我的需要工作。我非常感谢您的帮助。当我制作我的原型时,我并不关心数据的显示方式,我关心的是多个视图在它们共享的对象发生更改时被更新。DataGrid只是一个数据视图,可以很容易地代替我正在使用的ItemsControl来使用。如果我的原型是让DataGrid工作,那么我会使用DataGrid,有意义吗?我希望您能够实现您的解决方案。还有其他示例吗?即使JSprang分享了非常好的示例,我也希望找到任何与datagrids一起工作的示例。哇,这是一个非常好的示例!我更新了以前工作过的项目。现在,我得到一个错误,即名称空间中不存在“DataGrid”名称。您是否更改了名称空间引用?我试图将其引用到Silverlight SDK,但它也不起作用。我想知道有什么问题。否则,它真的很好。再次感谢您花时间和精力提供帮助。将此添加到控件顶部:xmlns:data=“clr namespace:System.Windows.Controls;assembly=System.Windows.Controls.data”您还需要添加对System.Windows.Controls.data的引用
public class Coordinate_DataViewModel
{
public Coordinate_DataViewModel(Coordinate_Model model)
{
this.underlyingModel = model;
}
private Coordinate_Model underlyingModel;
public double X
{
get { return underlyingModel.X; }
set { underlyingModel.X = value; }
}
public double Y
{
get { return underlyingModel.Y; }
set { underlyingModel.Y = value; }
}
public string XYCoordinate
{
get { return "(" + X + "," + Y + ")"; }
}
}
<data:DataGrid ItemsSource="{Binding Coordinates}" AutoGenerateColumns="False" Margin="10">
<data:DataGrid.Columns>
<data:DataGridTextColumn Header="X Position" Width="100" Binding="{Binding X}"/>
<data:DataGridTextColumn Header="Y Position" Width="100" Binding="{Binding Y}"/>
<data:DataGridTemplateColumn Header="Delete Item" Width="100">
<data:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Content="Delete" Tag="{Binding}" Click="Button_Click"/>
</DataTemplate>
</data:DataGridTemplateColumn.CellTemplate>
</data:DataGridTemplateColumn>
</data:DataGrid.Columns>
</data:DataGrid>
<data:DataGrid ItemsSource="{Binding Coordinates}" AutoGenerateColumns="False" Margin="10">
<data:DataGrid.Columns>
<data:DataGridTextColumn Header="Coordinate" Width="100" Binding="{Binding XYCoordinate}"/>
</data:DataGrid.Columns>
</data:DataGrid>