2015-02-03 19 views
5

Vì vậy, tôi thực sự bối rối ở đây.DataGrid SelectedItem không cập nhật

Tôi đã tạo một DataGrid, ràng buộc mã nguồn của nó theo hai chiều và ràng buộc mục được chọn theo hai cách. Bộ chọn item getter được gọi nhưng setter không bao giờ làm. Tất cả các mảnh dường như ở đây. Tôi đang thiếu gì?

<DataGrid ItemsSource="{Binding Properties ,Mode=TwoWay}" 
        SelectedItem="{Binding SelectedProperty ,Mode=TwoWay}" 
        CanUserDeleteRows="False" CanUserAddRows="False" AutoGenerateColumns="False" Background="LightBlue"> 

    <DataGrid.Columns> 
     <DataGridTextColumn IsReadOnly="True" Header="Address" Binding="{Binding Address}"/> 
    </DataGrid.Columns> 
    <DataGrid.RowDetailsTemplate> 
    <DataTemplate> 
     <DataGrid ItemsSource="{Binding Units ,Mode=TwoWay}" 
        SelectedItem="{Binding SelectedUnit, Mode=TwoWay}" 
        CanUserDeleteRows="False" CanUserAddRows="False" AutoGenerateColumns="False"> 

DataGrid đầu tiên của tôi hoạt động tốt bao gồm cả mục đã chọn.

Lưới lồng thứ ba và thứ tư tuy nhiên không liên kết với mục đã chọn. Các nguồn mục hoạt động nhưng đó là số

public class PropertyModel : ModelBase 
    { 
    private ObservableCollection<UnitModel> _Units; 

    public ObservableCollection<UnitModel> Units 
    { 
     get { return _Units; } 
     set { _Units = value; } 
    } 
    private UnitModel _SelectedUnit; 

    public UnitModel SelectedUnit 
    { 
     get { return _SelectedUnit; } 
     set { _SelectedUnit = value; OnPropertyChanged("SelectedUnit"); } 
    } 

Không có lỗi biểu hiện ràng buộc hoặc bất kỳ lỗi nào khác được hiển thị trong cửa sổ đầu ra.

+1

tôi bỏ qua vấn đề của tôi bằng cách sử dụng hai 'ItemsControl' cho lưới của tôi và một số cho 'RowHeader' và' ColumnHeader'. Vẫn sẽ được intressted nếu có một cách để làm điều đó với một 'DataGrid' – MadddinTribleD

Trả lời

5

Câu trả lời cho điều này là khá hiển nhiên.

tôi quên đặt UpdateSourceTrigger = PropertyChanged

vì thế nó sẽ giống như thế này

<DataGrid ItemsSource="{Binding Units ,Mode=TwoWay}" 
     SelectedItem="{Binding SelectedUnit,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" 
     CanUserDeleteRows="False" CanUserAddRows="False" AutoGenerateColumns="False"> 

này đã giải quyết được vấn đề

+1

Cảm ơn, tôi đã bị mắc kẹt trong này trong hai ngày. – Guge

1

tôi phải đối mặt với một cái gì đó tương tự như một vài tháng trước đây, vì một lý do khu vực nội DataGridItemSource đã không được thiết lập một cách chính xác bằng cách đó, tôi cố gắng khắc phục điều đó bằng cách liên kết sử dụng ElementName để thiết lập RowDetail DataGridItemSource đến SelectedItem trong phụ huynh một:

<DataGrid x:Name="DataGrid" ItemsSource="{Binding Properties ,Mode=TwoWay}" 
        SelectedItem="{Binding SelectedProperty ,Mode=TwoWay}" 
        CanUserDeleteRows="False" CanUserAddRows="False" AutoGenerateColumns="False" Background="LightBlue"> 

    <DataGrid.Columns> 
     <DataGridTextColumn IsReadOnly="True" Header="Address" Binding="{Binding Address}"/> 
    </DataGrid.Columns> 
    <DataGrid.RowDetailsTemplate> 
    <DataTemplate> 
     <DataGrid ItemsSource="{Binding SelectedItem.Units ,Mode=TwoWay,ElementName=DataGrid}" 
+1

ở đây những gì tôi đã nói với bạn về http://stackoverflow.com/questions/27131113/rowdetailstemplate-itemsource-binded-to-an-ef-navigationproperty – Usama

+2

Vì vậy, giải pháp này sẽ không hoạt động và đây là lý do tại sao. Vấn đề không phải là các itemssource không phải là populating. Điều đó hoạt động tốt. Vấn đề là thuộc tính mà mục đã chọn cho lưới lồng nhau nhất định không được thiết lập. Tôi đã thử nghiệm giải pháp của bạn, bao gồm việc thêm SelectedItem = {Binding ElementName = PropertiesGrid, Path = SelectedItem, Mode = TwoWay "} Rõ ràng nếu tôi làm điều này nó có thể thiết lập đúng mục đã chọn nhưng nó phá hủy mọi nỗ lực ràng buộc nó. else –

Các vấn đề liên quan