Wpf 将datagrid绑定到viewmodel
在wrt数据绑定下面的mvvm模式中,我做错了什么 我看到的是一个Wpf 将datagrid绑定到viewmodel,wpf,binding,datagrid,Wpf,Binding,Datagrid,在wrt数据绑定下面的mvvm模式中,我做错了什么 我看到的是一个DataGrid显示了一个额外的列和一个额外的行(都是空的),为什么 和:我必须如何让视图在默认情况下选择第一项 视图模型: public class Instance { public string Name { get; set; } } public class BaseData { public ObservableCollection<Instance> Instances { get { retu
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 }
}
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>
要选择数据网格中的第一项,您的数据网格定义应为
<DataGrid AutoGenerateColumns="False" x:Name="dgInstances" ItemsSource="{Binding Instances}" SelectedIndex="0">
您必须关闭DataGrid上的AutoGenerateColumns,并声明自己的列以显示所需内容 至于选择项目,您可以将DataGrid的SelectedItem绑定到ViewModel属性。 然后可以将SelectedItem设置为第一个实例
<DataGrid AutoGenerateColumns="False"
ItemsSource="{Binding Instances}"
SelectedItem="{Binding SelectedInstance, Mode=TwoWay}">
<DataGrid.Columns>
...
</DataGrid.Columns>
</DataGrid>
...
正确。这样的设计有多奇怪。:),是的,他们希望您配置我已经使用的内容AutoGenerateColumns=“False”它对额外的列没有影响,这可能不是一个列,而是一种“剩余空间”。SelectedItem=“{Binding SelectedInstance}”可能是正确的,第一次不起作用,因此我需要SelectedIndex=“0”默认情况下,列将只占用它们所需的空间,如果网格比列所需的更宽,则最终会得到一些额外的空间。将其中一列设置为Width=“*”,它将占用剩余的空间。对于SelectedInstance不起作用,您必须确保引发OnPropertyChanged,以便在更改属性时通知视图。
<DataGrid AutoGenerateColumns="False" x:Name="dgInstances" ItemsSource="{Binding Instances}" SelectedIndex="0">
<DataGrid AutoGenerateColumns="False"
ItemsSource="{Binding Instances}"
SelectedItem="{Binding SelectedInstance, Mode=TwoWay}">
<DataGrid.Columns>
...
</DataGrid.Columns>
</DataGrid>