سیدسبحان
شنبه 12 دی 1394, 18:07 عصر
سلام به همگی
اقا من یه اشکال دارم که نمیفهمم چکارش کنم.
نیگا این viewModel من هست:
private ObservableCollection<View_Full> _persons { get; set; }
private View_Full _selectedPerson;
public AllPersonViewModel()
{
using (var db = new HamzeNejadEntities())
{
Persons = new ObservableCollection<View_Full>(db.View_Full.ToList());
}
}
/// <summary>
/// تمام اشخاصی که در دیتاگریداصلی نمایش داده میشود
/// </summary>
public ObservableCollection<View_Full> Persons
{
get { return this._persons; }
set
{
if (value.Equals(this._persons))
{
return;
}
this._persons = value;
base.OnPropertyChanged("Persons");
}
}
/// <summary>
/// شخصی که در دیتاگرید انتخاب میشود
/// </summary>
public View_Full SelectedPerson
{
get { return _selectedPerson; }
set
{
if (value.Equals(this._selectedPerson))
{
return;
}
_selectedPerson = value;
OnPropertyChanged("SelectedPerson");
}
}
}
اینم کدهایدیتاگریدم که توی xaml م هست که دیتا کانتکست فرم هم هست ویومدل بالایی:
<DataGrid
FontSize="15"
FontFamily="Tahoma"
ItemsSource="{Binding Persons}"
SelectionMode="Extended"
SelectedItem="{Binding SelectedPerson,Mode=TwoWay,UpdateSourceTrigger=Pro pertyChanged}"
ScrollViewer.HorizontalScrollBarVisibility="Visible"
AutoGenerateColumns="False"
RowDetailsVisibilityMode="VisibleWhenSelected"
ScrollViewer.CanContentScroll="True"
VirtualizingStackPanel.IsVirtualizing="True"
VirtualizingStackPanel.VirtualizationMode="Recycling"
Grid.ColumnSpan="2"
Background="White"
BorderBrush="#FF42A2FF"
HorizontalGridLinesBrush="{x:Null}"
VerticalGridLinesBrush="#FFF9EFEF"
RowBackground="White" Margin="10"
Foreground="#FF3E3E3E"
AlternatingRowBackground="#FFA7F9F9"
AlternationCount="2"
><!--LoadingRowDetails="{Binding _loadGridCommand}"-->
<DataGrid.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel
IsVirtualizing="True"
VirtualizationMode="Recycling" />
</ItemsPanelTemplate>
</DataGrid.ItemsPanel>
<DataGrid.RowDetailsTemplate >
<DataTemplate>
<StackPanel Margin="5,5,5,5" Orientation="Vertical">
<DataGrid Margin="5,10,10,10"
ItemsSource="{Binding DataContext.SelectedPerson,
RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}"
AutoGenerateColumns="False"
x:Name="dataGridDetails" >
<DataGrid.Columns>
<DataGridTextColumn Header="نوع اوپراتور موبایل" Binding="{Binding Path=TypeMobile}"/>
<DataGridTextColumn Header="آدرس" Binding="{Binding Path=Address}"/>
<DataGridTextColumn Header="بیمه" Binding="{Binding Path=Bime}"/>
<DataGridTextColumn Header="گروه سنی" Binding="{Binding Path=GorooheSeni}"/>
<DataGridTextColumn Header="جنسیت" Binding="{Binding Path=Jensiyat}"/>
<DataGridTextColumn Header="مقطع تحصیلی" Binding="{Binding Path=MaghtaeTahsili}"/>
</DataGrid.Columns>
</DataGrid>
<TextBlock x:Name="txtInDataGrid" Text="{Binding Source=SelectedPerson, Path=Id}" ></TextBlock>
</StackPanel>
</DataTemplate>
</DataGrid.RowDetailsTemplate>
<DataGrid.Columns >
<DataGridTextColumn Header="کد"
Binding="{Binding Path=Id}"/>
<DataGridTextColumn Header="نام"
Binding="{Binding Path=Name}"/>
<DataGridTextColumn Header="نام خانوادگی"
Binding="{Binding Path=Family}"/>
<DataGridTextColumn Header="نام پدر" Binding="{Binding Path=FatherName}"/>
<DataGridTextColumn Header="شماره شناسنامه" Binding="{Binding Path=Sh_Sh}"/>
<DataGridTextColumn Header="تلفن" Binding="{Binding Path=Tel}"/>
<DataGridTextColumn Header="شماره موبایل" Binding="{Binding Path=Mobile}"/>
<DataGridTextColumn Header="تاریخ تولد" Binding="{Binding Path=Sh_B}"/>
<DataGridTextColumn Header="رشته تحصیلی" Binding="{Binding Path=ReshteyeTahsili}"/>
<DataGridTextColumn Header="مقطع تحصیلی" Binding="{Binding Path=MaghtaeTahsili}"/>
<DataGridTextColumn Header="سال تحصیلی" Binding="{Binding Path=SaaleTahsili}"/>
<DataGridTextColumn Header="مهارت" Binding="{Binding Path=Mahaarat}"/>
</DataGrid.Columns>
</DataGrid>
<TextBlock
x:Name="numberPerson"
Height="18"
Margin="12,4,50,0"
TextWrapping="Wrap"
DataContext="{Binding SelectedPerson}"
Text="{Binding Id}"
FlowDirection="RightToLeft"
VerticalAlignment="Top" Grid.Row="1" Grid.Column="1"/>
وقتی که داخل دیتاگریدم سطری رو انتخاب میکنم، اطلاعاتش به SelectedPerson که توی viewModel هم هست ریخته میشه. دلیل حرفم هم این هست که چون dataContext تکست بلاک numberPerson هم به SelectedPerson وصل هست، تغییر میکنه و Id سطر انتخاب شده رو نشون میده، ولی هر کنترلی که داخل RowDetailsTemplate تعریف شده، اصلا انگار به SelectedPerson متصل نیستن.
میخام بدونم چطوری کنترلهای داخل RowDetailsTemplate رو به DataContext فرمم وصل کنم. اصلا چرا اینطوری میشه؟؟؟
اقا من یه اشکال دارم که نمیفهمم چکارش کنم.
نیگا این viewModel من هست:
private ObservableCollection<View_Full> _persons { get; set; }
private View_Full _selectedPerson;
public AllPersonViewModel()
{
using (var db = new HamzeNejadEntities())
{
Persons = new ObservableCollection<View_Full>(db.View_Full.ToList());
}
}
/// <summary>
/// تمام اشخاصی که در دیتاگریداصلی نمایش داده میشود
/// </summary>
public ObservableCollection<View_Full> Persons
{
get { return this._persons; }
set
{
if (value.Equals(this._persons))
{
return;
}
this._persons = value;
base.OnPropertyChanged("Persons");
}
}
/// <summary>
/// شخصی که در دیتاگرید انتخاب میشود
/// </summary>
public View_Full SelectedPerson
{
get { return _selectedPerson; }
set
{
if (value.Equals(this._selectedPerson))
{
return;
}
_selectedPerson = value;
OnPropertyChanged("SelectedPerson");
}
}
}
اینم کدهایدیتاگریدم که توی xaml م هست که دیتا کانتکست فرم هم هست ویومدل بالایی:
<DataGrid
FontSize="15"
FontFamily="Tahoma"
ItemsSource="{Binding Persons}"
SelectionMode="Extended"
SelectedItem="{Binding SelectedPerson,Mode=TwoWay,UpdateSourceTrigger=Pro pertyChanged}"
ScrollViewer.HorizontalScrollBarVisibility="Visible"
AutoGenerateColumns="False"
RowDetailsVisibilityMode="VisibleWhenSelected"
ScrollViewer.CanContentScroll="True"
VirtualizingStackPanel.IsVirtualizing="True"
VirtualizingStackPanel.VirtualizationMode="Recycling"
Grid.ColumnSpan="2"
Background="White"
BorderBrush="#FF42A2FF"
HorizontalGridLinesBrush="{x:Null}"
VerticalGridLinesBrush="#FFF9EFEF"
RowBackground="White" Margin="10"
Foreground="#FF3E3E3E"
AlternatingRowBackground="#FFA7F9F9"
AlternationCount="2"
><!--LoadingRowDetails="{Binding _loadGridCommand}"-->
<DataGrid.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel
IsVirtualizing="True"
VirtualizationMode="Recycling" />
</ItemsPanelTemplate>
</DataGrid.ItemsPanel>
<DataGrid.RowDetailsTemplate >
<DataTemplate>
<StackPanel Margin="5,5,5,5" Orientation="Vertical">
<DataGrid Margin="5,10,10,10"
ItemsSource="{Binding DataContext.SelectedPerson,
RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}"
AutoGenerateColumns="False"
x:Name="dataGridDetails" >
<DataGrid.Columns>
<DataGridTextColumn Header="نوع اوپراتور موبایل" Binding="{Binding Path=TypeMobile}"/>
<DataGridTextColumn Header="آدرس" Binding="{Binding Path=Address}"/>
<DataGridTextColumn Header="بیمه" Binding="{Binding Path=Bime}"/>
<DataGridTextColumn Header="گروه سنی" Binding="{Binding Path=GorooheSeni}"/>
<DataGridTextColumn Header="جنسیت" Binding="{Binding Path=Jensiyat}"/>
<DataGridTextColumn Header="مقطع تحصیلی" Binding="{Binding Path=MaghtaeTahsili}"/>
</DataGrid.Columns>
</DataGrid>
<TextBlock x:Name="txtInDataGrid" Text="{Binding Source=SelectedPerson, Path=Id}" ></TextBlock>
</StackPanel>
</DataTemplate>
</DataGrid.RowDetailsTemplate>
<DataGrid.Columns >
<DataGridTextColumn Header="کد"
Binding="{Binding Path=Id}"/>
<DataGridTextColumn Header="نام"
Binding="{Binding Path=Name}"/>
<DataGridTextColumn Header="نام خانوادگی"
Binding="{Binding Path=Family}"/>
<DataGridTextColumn Header="نام پدر" Binding="{Binding Path=FatherName}"/>
<DataGridTextColumn Header="شماره شناسنامه" Binding="{Binding Path=Sh_Sh}"/>
<DataGridTextColumn Header="تلفن" Binding="{Binding Path=Tel}"/>
<DataGridTextColumn Header="شماره موبایل" Binding="{Binding Path=Mobile}"/>
<DataGridTextColumn Header="تاریخ تولد" Binding="{Binding Path=Sh_B}"/>
<DataGridTextColumn Header="رشته تحصیلی" Binding="{Binding Path=ReshteyeTahsili}"/>
<DataGridTextColumn Header="مقطع تحصیلی" Binding="{Binding Path=MaghtaeTahsili}"/>
<DataGridTextColumn Header="سال تحصیلی" Binding="{Binding Path=SaaleTahsili}"/>
<DataGridTextColumn Header="مهارت" Binding="{Binding Path=Mahaarat}"/>
</DataGrid.Columns>
</DataGrid>
<TextBlock
x:Name="numberPerson"
Height="18"
Margin="12,4,50,0"
TextWrapping="Wrap"
DataContext="{Binding SelectedPerson}"
Text="{Binding Id}"
FlowDirection="RightToLeft"
VerticalAlignment="Top" Grid.Row="1" Grid.Column="1"/>
وقتی که داخل دیتاگریدم سطری رو انتخاب میکنم، اطلاعاتش به SelectedPerson که توی viewModel هم هست ریخته میشه. دلیل حرفم هم این هست که چون dataContext تکست بلاک numberPerson هم به SelectedPerson وصل هست، تغییر میکنه و Id سطر انتخاب شده رو نشون میده، ولی هر کنترلی که داخل RowDetailsTemplate تعریف شده، اصلا انگار به SelectedPerson متصل نیستن.
میخام بدونم چطوری کنترلهای داخل RowDetailsTemplate رو به DataContext فرمم وصل کنم. اصلا چرا اینطوری میشه؟؟؟