[英]Binding: how can I bind a Property from another class
我正在嘗試從表bewertungen
綁定屬性isfavorit
,這是 class filme_serien
中的 ICollection 。 我有一個filme_serien
的列表。 我正在嘗試通過filme_serien
列表綁定isfavorit
表中的bewertungen
。
急診室:
C#:
電影連續劇:
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; }
}
貝維爾通根:
public partial class Bewertungen
{
public string BwAcc { get; set; }
public int BwFs { get; set; }
public bool Isfavorit { get; set; }
public int Bewertung { get; set; }
public virtual Account BwAccNavigation { get; set; }
public virtual FilmeSerien BwFsNavigation { 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();
}
}
XAML:
d:DataContext="{d:DesignInstance Type=anzeigen:FSViewModel}"
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 進行一次新的查詢,並返回一個新的集合。 包括,此系列中的所有 FilmeSerien 副本也將是新的。 但是根據 Presentation 的邏輯,你會認為它們是一樣的。 這樣的實現很可能會導致某種錯誤。
最好在 using 塊中一次性使用 DB 上下文(變量_db
)。 我們提出了一個請求,從中獲取數據,然后將其銷毀。 否則,對於每一個請求,都需要考慮上一個請求的結果,用於執行請求的資源不會在請求之間釋放。
實現示例:
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>
<ToggleButton Command="{Binding FavoritCommand,
Source={StaticResource viewModel}}" .../>
d: DesignInstance
。這種 ViewModel 實現的示例:
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();
}
}
希望其中一些對您有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.