0

我在 wrt 数据绑定下面的 mvvm 模式中做错了什么?

我看到的是DataGrid显示一个额外的列和一个额外的行(都是空的),这是为什么呢?

并且:我必须如何继续让我的视图默认选择第一项?

视图模型:

public class Instance { public string Name { get; set; } }

public class BaseData
{
    public ObservableCollection<Instance> Instances { get { return instances; } }
    public BaseData()
        {
            var bw = new BackgroundWorker();
            bw.DoWork += new DoWorkEventHandler(fetch);
            bw.RunWorkerAsync();
            bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(fetched);
        }
    void fetch(){...}
    void fetched(..){... // raise event 'Fetched' to the view }
}

查看(xaml):

<DataGrid AutoGenerateColumns="False" x:Name="dgInstances" ItemsSource="{Binding Instances}">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Instance" Binding="{Binding Path=Name, Mode=OneWay}" />
    </DataGrid.Columns>
</DataGrid>

查看(代码隐藏):

BaseData BaseData;

public MainWindow()
{
    InitializeComponent();

    Loaded += delegate
    {
        BaseData = new BaseData();
        BaseData.Fetched += basedata_fetched;
    };
}

void basedata_fetched(...)
{
    DataContext = BaseData;
}
4

3 回答 3

1

1) CanUserAddRows="False" 将删除多余的行。

2) 列上的 Width="*" 将拉伸到网格的宽度并隐藏看起来像另一列的内容。

   <DataGrid  CanUserAddRows="False" AutoGenerateColumns="False" x:Name="dgInstances" ItemsSource="{Binding Instances}">
        <DataGrid.Columns>
            <DataGridTextColumn Header="Instance" Binding="{Binding Path=Name, Mode=OneWay}" Width="*" />
        </DataGrid.Columns>
   </DataGrid>
于 2013-10-31T14:35:15.110 回答
1

要选择 DataGrid 中的第一项,您的数据网格定义应该是

<DataGrid AutoGenerateColumns="False" x:Name="dgInstances" ItemsSource="{Binding Instances}" SelectedIndex="0">
于 2013-10-31T14:39:56.143 回答
0

您必须关闭 DataGrid 上的 AutoGenerateColumns 并声明您自己的列以显示您想要的任何内容。

至于选择您的项目,您可以将 DataGrid 的 SelectedItem 绑定到 ViewModel 属性。然后您可以将 SelectedItem 设置为您的第一个实例。

 <DataGrid AutoGenerateColumns="False"
           ItemsSource="{Binding Instances}"
           SelectedItem="{Binding SelectedInstance, Mode=TwoWay}">
               <DataGrid.Columns>
                   ...
               </DataGrid.Columns>
 </DataGrid>
于 2013-10-31T14:41:56.637 回答