RowDetailsTemplate 中的组合框在选定列之前全部更新
Combobox in RowDetailTemplate update all before selected colums
我在 Datagrid 的 RowdetailsTemplate 中有一个组合框。如果我切换列,然后使用之前选择的值自动更改 Datagridcolumn 中的值。
Datagrid 列中的值只有在组合框中的值发生变化时才会发生变化
public class BMFill
{
public BMFill()
{
colCBArt.Add(new CBArt { Name = "test" , Nr = 0 });
colCBArt.Add(new CBArt { Name = "hallo", Nr = 1 });
colCBArt.Add(new CBArt { Name = "welt", Nr = 2 });
colCBArt.Add(new CBArt { Name = "blubb", Nr = 3 });
colCBArt.Add(new CBArt { Name = "lalalala", Nr = 4 });
}
List<CBArt> colCBArt = new List<CBArt>();
CollectionViewSource cvsCBArt = null;
public ICollectionView ViewCBArt
{
get
{
if (cvsCBArt == null) cvsCBArt = new CollectionViewSource() { Source = colCBArt };
return cvsCBArt.View;
}
}
public class CBArt
{
public string Name { get; set; }
public int Nr { get; set; }
}
}
<Window.Resources>
<local:BMFill x:Key="vm"/>
</Window.Resources>
<DataGrid x:Name="dg">
<DataGrid.RowDetailsTemplate>
<DataTemplate>
<ComboBox Margin="10,10,10,10" Grid.Column="1" Grid.Row="1"
SelectedValuePath="Nr"
SelectedValue="{Binding NrDG,UpdateSourceTrigger=PropertyChanged}"
DisplayMemberPath="Name"
ItemsSource="{Binding Source={StaticResource vm}, Path=ViewCBArt}"
/>
</DataTemplate>
</DataGrid.RowDetailsTemplate>
</DataGrid>
我希望能理解我的问题并能帮上忙 =)
您可以尝试为 DropDownOpened 和 DropDownClosed 事件添加事件处理程序,在打开下拉菜单时引发一个标志,并检查在更改 Datagrid 列中的值时是否未引发该标志。
XAML:
<ComboBox Margin="10,10,10,10" Grid.Column="1" Grid.Row="1"
SelectedValuePath="Nr"
SelectedValue="{Binding NrDG,UpdateSourceTrigger=PropertyChanged}"
DisplayMemberPath="Name"
ItemsSource="{Binding Source={StaticResource vm}, Path=ViewCBArt}"
DropDownOpened="OnDropDownOpened" DropDownClosed="OnDropDownClosed"
/>
C#:
private bool _comboxBoxIsOpened = false;
private void OnDropDownOpened(object sender, EventArgs e)
{
_comboxBoxIsOpened = true;
}
private void OnDropDownClosed(object sender, EventArgs e)
{
_comboxBoxIsOpened = false;
}
SelectedValuePath="Nr"
SelectedValue="{Binding NrDG,UpdateSourceTrigger=PropertyChanged}"
DisplayMemberPath="Name"
ItemsSource="{Binding Source={StaticResource vm}, Path=ViewCBArt}"
IsSynchronizedWithCurrentItem="False"
这个解决方案是我做的
我在 Datagrid 的 RowdetailsTemplate 中有一个组合框。如果我切换列,然后使用之前选择的值自动更改 Datagridcolumn 中的值。 Datagrid 列中的值只有在组合框中的值发生变化时才会发生变化
public class BMFill
{
public BMFill()
{
colCBArt.Add(new CBArt { Name = "test" , Nr = 0 });
colCBArt.Add(new CBArt { Name = "hallo", Nr = 1 });
colCBArt.Add(new CBArt { Name = "welt", Nr = 2 });
colCBArt.Add(new CBArt { Name = "blubb", Nr = 3 });
colCBArt.Add(new CBArt { Name = "lalalala", Nr = 4 });
}
List<CBArt> colCBArt = new List<CBArt>();
CollectionViewSource cvsCBArt = null;
public ICollectionView ViewCBArt
{
get
{
if (cvsCBArt == null) cvsCBArt = new CollectionViewSource() { Source = colCBArt };
return cvsCBArt.View;
}
}
public class CBArt
{
public string Name { get; set; }
public int Nr { get; set; }
}
}
<Window.Resources>
<local:BMFill x:Key="vm"/>
</Window.Resources>
<DataGrid x:Name="dg">
<DataGrid.RowDetailsTemplate>
<DataTemplate>
<ComboBox Margin="10,10,10,10" Grid.Column="1" Grid.Row="1"
SelectedValuePath="Nr"
SelectedValue="{Binding NrDG,UpdateSourceTrigger=PropertyChanged}"
DisplayMemberPath="Name"
ItemsSource="{Binding Source={StaticResource vm}, Path=ViewCBArt}"
/>
</DataTemplate>
</DataGrid.RowDetailsTemplate>
</DataGrid>
我希望能理解我的问题并能帮上忙 =)
您可以尝试为 DropDownOpened 和 DropDownClosed 事件添加事件处理程序,在打开下拉菜单时引发一个标志,并检查在更改 Datagrid 列中的值时是否未引发该标志。
XAML:
<ComboBox Margin="10,10,10,10" Grid.Column="1" Grid.Row="1"
SelectedValuePath="Nr"
SelectedValue="{Binding NrDG,UpdateSourceTrigger=PropertyChanged}"
DisplayMemberPath="Name"
ItemsSource="{Binding Source={StaticResource vm}, Path=ViewCBArt}"
DropDownOpened="OnDropDownOpened" DropDownClosed="OnDropDownClosed"
/>
C#:
private bool _comboxBoxIsOpened = false;
private void OnDropDownOpened(object sender, EventArgs e)
{
_comboxBoxIsOpened = true;
}
private void OnDropDownClosed(object sender, EventArgs e)
{
_comboxBoxIsOpened = false;
}
SelectedValuePath="Nr"
SelectedValue="{Binding NrDG,UpdateSourceTrigger=PropertyChanged}"
DisplayMemberPath="Name"
ItemsSource="{Binding Source={StaticResource vm}, Path=ViewCBArt}"
IsSynchronizedWithCurrentItem="False"
这个解决方案是我做的