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

DataGrid の最初のアイテムを選択するには、データグリッドの定義を次のようにする必要があります。

<DataGrid AutoGenerateColumns="False" x:Name="dgInstances" ItemsSource="{Binding Instances}" SelectedIndex="0">
于 2013-10-31T14:39:56.143 に答える
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 に答える
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 に答える