2

なぜ動かないのかわかりません。

これは私のクラスです

public class Article : Screen
{
    public string Code { get; set; }
    public string Description{ get; set; }
    public decimal Cost{ get; set; }
    public decimal Price{ get; set; }
}

これはDataGridのXAMLコードです。

    <DataGrid Height="211" HorizontalAlignment="Left" 
        Margin="12,31,0,0" VerticalAlignment="Top" Width="521" 
        AutoGenerateColumns="False" ItemsSource="{Binding List}">
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding Path=Code}" Header="Code" />
            <DataGridTextColumn Binding="{Binding Path=Description}" Header="Description" />
            <DataGridTextColumn Binding="{Binding Path=Cost}" Header="Cost" />
            <DataGridTextColumn Binding="{Binding Path=Price}" Header="Price" />
        </DataGrid.Columns>
    </DataGrid>
    <Button Content="Button" Height="39" HorizontalAlignment="Left" 
            Margin="223,262,0,0" VerticalAlignment="Top" Width="110"
            x:Name="AllArticles"/>

そしてこれは私のビューモデルです

[Export(typeof(IShell))]
public class ArtsViewModel : Screen
{
    public List<Article> List = new List<Article>();

    public void AllArticles()
    {
        Recover recover = new Recover();  //a model called Recover
        List = recover.Import().Articles; //return a List of Article
        NotifyOfPropertyChange("List");
    }    
}

データグリッドが機能しないのはなぜですか?

4

4 に答える 4

8

Caliburn.Microでバインド規則を有効にするには、通常x:Name 、XAMLでプロパティを使用します。ListプロパティをItemsSourceに明示的にバインドする代わりに、次のDataGridような命名規則を使用する場合。

<DataGrid x:Name="List" Height="211" HorizontalAlignment="Left" 
    Margin="12,31,0,0" VerticalAlignment="Top" Width="521" 
    AutoGenerateColumns="False">

後続のバインディングは希望どおりに機能するはずです。

Listああ、フィールドの代わりにプロパティを作成する必要もあります。

public List<Article> List { get; private set; }

の変更Listがデータグリッドに適切に反映されるようにする場合は、ListプロパティIObservableCollectionをバッキングフィールド付きにする必要があります。

private IObservableCollection<Article> _list;
public IObservableCollection<Article> List { 
    get { return _list; }
    set {
        _list = value;
        NotifyOfPropertyChange(() => List);
    }
}
于 2013-03-24T17:27:02.957 に答える
1

a)DataContextを設定しましたか?

b)「Binding = "{BindingCode}」(Path =なし)を試してみてください。問題なく動作します。

于 2013-03-24T17:02:47.770 に答える
0

UWPアプリの場合、x:Name規則が機能しないことがわかりました。バインド可能なコレクションを使用して、ItemsSourceに直接バインドする必要があります。次に、Path=PropertyNameを使用して列を指定しました。

XAML:

<controls:DataGrid Grid.Row="3" Grid.Column="1" Grid.ColumnSpan="3"  ItemsSource="{Binding RawCSVData}" AutoGenerateColumns="false">
        <controls:DataGrid.Columns>
            <controls:DataGridTextColumn Header="Time" Binding="{Binding Path=Time}"/>
            <controls:DataGridTextColumn Header="Signal" Binding="{Binding Path=Signal}"/>
            <controls:DataGridTextColumn Header="Response" Binding="{Binding Path=Response}"/>

        </controls:DataGrid.Columns>
    </controls:DataGrid>

CSVData.cs:

public class CSVData: Screen
{
    public double Time { get; set; }
    public double Signal { get; set; }
    public double Response { get; set; }
}

ViewModel.csスニペット:

public BindableCollection<CSVData> RawCSVData { get; set; }
于 2018-08-24T17:02:34.677 に答える
-2
     private void _bookeditpage_ConfirmBook(Book _book, bool _isnewone) 
     {
        if (_isnewone)
        {
            Books.Add(_book);
        }
        else
        {
            //doesn't refresh datagrid
            SelectedBook = _book;
            //

            //works fine :)

            SelectedBook.BookName = _book.BookName;
            SelectedBook.IsPrenum=_book.IsPrenum;
            SelectedBook.Publisher=_book.Publisher;

           //
        }
    }
于 2015-08-03T10:48:37.253 に答える