如何在Silverlight应用程序中更新运行时数据网格项的值?

时间:2011-03-21 00:06:40

标签: silverlight mvvm datagrid

我的方案是,只有满足该值的特定条件时,我才需要更新Y坐标值。例如,如果值为“不可用”或“0”或“15”。然后,通过单击“更新”按钮,该值应更改为“更新为”,并且字符串左侧的红色框可以更改为任何其他颜色。我想知道根据下面的代码找出正确的方法。任何建议都非常感谢!谢谢!

XAML:

    <UserControl.DataContext>     
    <local:MainPage_ViewModel/> 
</UserControl.DataContext>  
<StackPanel Orientation="Horizontal">   
    <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>
    <StackPanel VerticalAlignment="Top" Margin="0,40,0,0">
        <TextBlock x:Name="Click_to_update_value" TextWrapping="Wrap" Text="TextBlock" VerticalAlignment="Top"/>
        <Button x:Name="Update_value" Content="Update Value" Margin="0,10,0,0" Click="Button_Update"/>
    </StackPanel> 
</StackPanel> 

代码背后:

public partial class MainPage : UserControl
{
    public MainPage()
    {
        InitializeComponent();         
        this.viewModel = this.DataContext as MainPage_ViewModel; 
    }

    private MainPage_ViewModel viewModel;      
    private void Button_Update(object sender, RoutedEventArgs e)     
    {         

    } 
}

查看型号:

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 void UpdateCoordinate(Coordinate_DataViewModel dvmToDelete)
    {

    }
}

//Model
public class Coordinate_Model 
{     
    public double X;     
    public double Y; 
} 

//DataViewModel
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 + ")"; }     
    } 
}

1 个答案:

答案 0 :(得分:1)

您可以通过更新可观察集合来更新数据网格中的值。您可能想要做的一件事是处理viewmodel中的事件而不是后面的代码。这可能会使更新视图模型中的集合中的值更有意义。

相关问题