我正在使用C#和MVVM设计模式编写WPF应用程序。
我有以下(.)\1.*(.)\2.*(.)\3
对象
c#
然后我有以下视图模型,这是我视图的public class ProductStyleGenericModel : BindableBase
{
public int Id { get; set; }
public string Name { get; set; }
public int? SelectedValue { get; set; }
public IEnumerable<SelectListItem<int>> Items { get; set; }
}
。
DataContext
最后,我有以下XAML视图,它只显示public class EditProductViewModel : BindableBase
{
public IEnumerable<ProductStyleGenericModel> Styles { get; set;}
// .......
// I removed the rest for the code of simplicity
}
。每个ListBox
都有一个网格,其中ListBoxItem
位于左侧,TextBlock
位于右侧。
ComboBox
当选择<GroupBox Header="Product Description">
<StackPanel>
<ListBox ItemsSource="{Binding Styles}">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="2*" />
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Name}" />
<ComboBox ItemsSource="{Binding Items}"
Grid.Column="1"
SelectedValue="{Binding RelativeSource={RelativeSource AncestorType=ListBox}, Path=SelectedValue, Mode=TwoWay}"
SelectedValuePath="Value"
DisplayMemberPath="Text"/>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</StackPanel>
</GroupBox>
中的项目时,我想使用双向绑定更新DataContext.Styles.SelectedValue,以便我知道选择了哪个值,然后将其存储在数据库中。
问题
由于某些原因,ComboBox
集合中的每个SelectedValue
始终为Styles
,并且在选择所选项目时不会更新。
我猜我试图将0
绑定到ComboBox.SelectedValue
的原因不正确。
我在这里写的逻辑是......找到类型为Styles.SelectedValue
的直接祖先,然后使用ListBox
绑定到源对象上的SelectedValue
属性
请注意,我正在使用Fody.PropertyChanged package在Path=SelectedValue
课程上实施INotifyPropertyChanged
,{{3}}会在编译时将BindableBase
注入属性设置器。
问题
我在这做什么,我该如何解决这个问题?
已更新
如果需要,这是我的RaisePropertyChanged
课程
SelectedListItem
答案 0 :(得分:1)
我认为绑定可能是错误的。试试这个:
<ComboBox ItemsSource="{Binding Items}"
Grid.Column="1"
SelectedValue="{Binding SelectedValue}"
SelectedValuePath="Value"
DisplayMemberPath="Text"/>
我认为你要绑定的属性SelectedValue在当前数据上下文中。你绑定的属性是ListBox控件上的SelectedValue,至少对我没有任何意义。