我想要得到的价值总是空的

时间:2014-02-24 09:27:22

标签: wpf mvvm ribbon

在我的应用程序中,我使用功能区控件,在此功能区上是一个按钮。 当我单击按钮时,它应该从我的视图中的数据网格中获取所选值。

现在当我点击按钮时,它获得的值始终为null

这是我的代码:

View1.xaml

<ScrollViewer Background="White" Grid.Row="1" Grid.Column="1" Margin="2" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Visible">
    <DataGrid SelectionMode="Single" ItemsSource="{Binding Collection}" SelectedItem="{Binding Test, Mode=TwoWay}" AutoGenerateColumns="False" Name="stackpanelLocked"  HorizontalAlignment="Left">
        <DataGrid.Columns>
            <DataGridTextColumn Header="RandomHeaderX" Binding="{Binding Path=X}"/>
            <DataGridTextColumn Header="RandomHeaderY" Binding="{Binding Path=Y}"/>
        </DataGrid.Columns>
    </DataGrid>
</ScrollViewer>

视图模型

//get selected item value
string lastSelectedValue;
private Model _test;        
public Model Test 
{
    get
    {
        return _test;
    }
    set
    {
        _test = value;
        if(Test != null)
            this.lastSelectedValue = string.Format("Variabele X: {0} Variabele Y: {1}", Test.X, Test.Y);
    }
}

private ICommand _ClickCommand;
public ICommand ClickCommand
{
    get
    {
        if (_ClickCommand == null)
            _ClickCommand = new DelegateCommand(new Action(Execute),
                        new Func<bool>(CanExecute));
        return _ClickCommand;
    }
}

public bool CanExecute()
{
    return true;
}

public void Execute()
{
    if(lastSelectedValue != null)
        Clipboard.SetText(lastSelectedValue);  
}

模型

public int X { get; set; }
public int Y { get; set; }

public Model(int x, int y)
{
    X = x;
    Y = y;
}

额外信息:

每次点击数据网格时,它都会实际填充string lastSelectedValue。 但是,当我单击功能区上的按钮时,它会说lastSelectedValue为空。

收集内容:

public List<DatabaseClass.coord> AllCoords { get; set; }
public ObservableCollection<Model> Collection { get; set; }
public ModuleARibbonTabModel()
{
    Collection = new ObservableCollection<Model>();
    GenerateDatas();
}

private void GenerateDatas()
{
    using (var ctx = new DatabaseClass.TestDatabaseEntities1 ())
    {
        AllCoords = ctx.coord.ToList();
    }
    foreach(DatabaseClass.coord f in AllCoords)
    {
        Collection.Add(new Model(Convert.ToInt32(f.Een.ToString()), Convert.ToInt32(f.Twee.ToString())));
    }
}

2 个答案:

答案 0 :(得分:1)

绑定到SelectedItem而不是SelectedValue

答案 1 :(得分:0)

我设法解决了这个问题。 我不认为这是一个很好的解决方案,但这是我改变的:
我将string lastSelectedValue更改为static string lastSelectedValue 这确保我可以获得价值。