C# 绑定:如何从另一个类绑定属性
我正在尝试绑定表C# 绑定:如何从另一个类绑定属性,c#,wpf,data-binding,binding,C#,Wpf,Data Binding,Binding,我正在尝试绑定表bewertungen中的属性isfavorit,这是类filme\u serien中的一个ICollection。我有一张电影系列的清单。我正试图通过filme\u serien列表将isfavorit绑定到bewertungen表中 ER: d:DataContext="{d:DesignInstance Type=anzeigen:FSViewModel}" public IEnumerable<FilmeSerien> FSList {g
bewertungen
中的属性isfavorit
,这是类filme\u serien
中的一个ICollection。我有一张电影系列的清单。我正试图通过filme\u serien
列表将isfavorit
绑定到bewertungen
表中
ER:
d:DataContext="{d:DesignInstance Type=anzeigen:FSViewModel}"
public IEnumerable<FilmeSerien> FSList {get;}
// ViewModel constructor
public FSViewModel()
{
// I don't know the name of your DB context implementation type,
// so the name is conditional
using(var db = new AppDbContext())
FSList = db.FilmeSeriens
.Include(x => x.Bewertungens)
.AsNoTracking()
.ToList();
}
<UserControl .....
DataContext="{DynamicResource viewModel}">
<UserControl.Resources>
<anzeigen:FSViewModel x:Key="viewModel"/>
<UserControl.Resources>
private static bool IsInDesignMode { get; }
= DesignerProperties.GetIsInDesignMode(new DependencyObject());
public FSViewModel()
{
if (IsInDesignMode)
{
FSList = new List<FilmeSerien>()
{
// Several FilmeSerien instances are created here for the demo mode.
new FilmeSerien(...){....},
new FilmeSerien(...){....},
new FilmeSerien(...){....},
};
}
else
{
// Here is the code that runs when the Application is executed
using(var db = new AppDbContext())
FSList = db.FilmeSeriens
.Include(x => x.Bewertungens)
.AsNoTracking()
.ToList();
}
}
C#:
d:DataContext="{d:DesignInstance Type=anzeigen:FSViewModel}"
public IEnumerable<FilmeSerien> FSList {get;}
// ViewModel constructor
public FSViewModel()
{
// I don't know the name of your DB context implementation type,
// so the name is conditional
using(var db = new AppDbContext())
FSList = db.FilmeSeriens
.Include(x => x.Bewertungens)
.AsNoTracking()
.ToList();
}
<UserControl .....
DataContext="{DynamicResource viewModel}">
<UserControl.Resources>
<anzeigen:FSViewModel x:Key="viewModel"/>
<UserControl.Resources>
private static bool IsInDesignMode { get; }
= DesignerProperties.GetIsInDesignMode(new DependencyObject());
public FSViewModel()
{
if (IsInDesignMode)
{
FSList = new List<FilmeSerien>()
{
// Several FilmeSerien instances are created here for the demo mode.
new FilmeSerien(...){....},
new FilmeSerien(...){....},
new FilmeSerien(...){....},
};
}
else
{
// Here is the code that runs when the Application is executed
using(var db = new AppDbContext())
FSList = db.FilmeSeriens
.Include(x => x.Bewertungens)
.AsNoTracking()
.ToList();
}
}
电影系列:
public partial class FilmeSerien
{
public FilmeSerien()
{
Bewertungens = new HashSet<Bewertungen>();
}
public int FId { get; set; }
public bool Isfilm { get; set; }
public virtual ICollection<Bewertungen> Bewertungens { get; set; }
}
FSList
和SelectedFS
位于FSViewModel
中:
public IEnumerable<FilmeSerien> FSList
{
get => _db?.FilmeSeriens.Include(x => x.Bewertungens).AsNoTracking().ToList();
};
public FilmeSerien _selectedFS;
public FilmeSerien SelectedFS
{
get => _selectedFS;
set
{
_selectedFS = value;
NotifyPropertyChanged();
}
}
FSViewModel
包含履行其职责的FSList
和FavoritCommand
<ListBox ScrollViewer.HorizontalScrollBarVisibility="Disabled"
ItemsSource="{Binding FSList}"
SelectedItem="{Binding SelectedFS}">
<ListBox.ItemTemplate>
<DataTemplate>
<materialDesign:Card >
<Grid>
<ToggleButton Style="{StaticResource MaterialDesignFlatPrimaryToggleButton}"
IsChecked="False"
Command="{Binding DataContext.FavoritCommand,
RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}"
CommandParameter="{Binding}" />
</Grid>
</materialDesign:Card>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
我不太理解你的问题,所以这更像是一个建议。
但也许其中之一就是解决你的问题
FSList
属性。每次访问此属性时,都会向BD进行新的查询,并返回新的集合。
包括,本系列中的所有Filmereserien副本也将是新的。但是根据演示文稿的逻辑,你会认为它们是一样的。这样的实现可能会导致一些bug
\u DB
)。
我们提出请求,从中获取数据,然后销毁它。
否则,对于每个请求,您需要考虑上一个请求的结果,用于实现请求的资源将不会在请求之间释放
d:DataContext="{d:DesignInstance Type=anzeigen:FSViewModel}"
public IEnumerable<FilmeSerien> FSList {get;}
// ViewModel constructor
public FSViewModel()
{
// I don't know the name of your DB context implementation type,
// so the name is conditional
using(var db = new AppDbContext())
FSList = db.FilmeSeriens
.Include(x => x.Bewertungens)
.AsNoTracking()
.ToList();
}
<UserControl .....
DataContext="{DynamicResource viewModel}">
<UserControl.Resources>
<anzeigen:FSViewModel x:Key="viewModel"/>
<UserControl.Resources>
private static bool IsInDesignMode { get; }
= DesignerProperties.GetIsInDesignMode(new DependencyObject());
public FSViewModel()
{
if (IsInDesignMode)
{
FSList = new List<FilmeSerien>()
{
// Several FilmeSerien instances are created here for the demo mode.
new FilmeSerien(...){....},
new FilmeSerien(...){....},
new FilmeSerien(...){....},
};
}
else
{
// Here is the code that runs when the Application is executed
using(var db = new AppDbContext())
FSList = db.FilmeSeriens
.Include(x => x.Bewertungens)
.AsNoTracking()
.ToList();
}
}
希望其中一些能对您有所帮助。一个Bewertung应该命名为singular Bewertung,而不是Bewertungen。该集合应称为Bewertungen,而不是Bewertungens,后者不是德语。一般来说,使用英文标识符名称,因为它对于国际观众来说更具可读性。@Clemens我对此无能为力,因为我已经通过
EntityFrameworkCore
重命名模型元素生成了模型类……您要绑定到哪个特定的Bewertungen
?ToggleButton
的DataContext
是什么?请发布更多您的xaml,以便人们可以帮助您