[英]WPF: Is it possible to bind to a parent on userControl property and set its DataContext to a viewmodel?
我被困了一會兒,直到我發現為什么事情不起作用。 我正在基於Connected的值(這是SetupViewModel(parent)的一個屬性)更改兩個不同UserControl上的可見性。 這些用戶控件之一也將其DataContext設置為在SetupViewModel中創建的視圖模型。 但是,在還設置DataContext時,連接綁定不起作用。
這就是我希望它能工作的方式
<userControls:SessionSetupUserControl x:Name="SessionSetupUserControl" DataContext="{Binding SessionSetupViewModel}" Visibility="{Binding Connected, Mode=OneWay, Converter={StaticResource BoolToVis}, FallbackValue=Collapsed}" />
但是使用此功能時,“可見性”值將不會更新。
當我刪除DataContext時,可見性開始更新。
<userControls:SessionSetupUserControl x:Name="SessionSetupUserControl" Visibility="{Binding Connected, Mode=OneWay, Converter={StaticResource BoolToVis}, FallbackValue=Collapsed}" />
這是父級ViewModel。 僅顯示相關綁定。
public class SetupViewModel : BindableBase
{
private bool _connected;
public SessionSetupViewModel SessionSetupViewModel { get; private set; }
public bool Connected
{
get
{
return _connected;
}
private set
{
SetPropertyAndNotifyChanges(ref _connected, value);
}
}
}
我認為在解析可見性綁定時,UserControl的DataContext發生了變化,但是我不習慣使用WPF或綁定,因此我無法使其正常運行。
非常感激任何的幫助。
您總是可以這樣綁定到控件的Parent元素的DataContext中的屬性:
Visibility="{Binding Parent.DataContext.Connected,
RelativeSource={RelativeSource Self},
Converter={StaticResource BoolToVis}}"
但是,您可以考慮采用另一種設計,即您的UserControl不直接綁定到顯式分配的DataContext。
控件可能會公開實例化綁定的依賴項屬性。 因此,它將變得獨立於任何特定的視圖模型。
<userControls:SessionSetupUserControl
Visibility="{Binding Connected, Converter={StaticResource BoolToVis}}"
SomeProperty="{Binding SessionSetupViewModel.SomeVmProperty}"
SomeOtherProperty="{Binding SessionSetupViewModel.SomeOtherVmProperty}"
.../>
綁定的另一種選擇是嵌套控件。
<UserControl Visibility="{Binding Connected, Mode=OneWay, Converter={StaticResource BoolToVis}, FallbackValue=Collapsed}" >
<userControls:SessionSetupUserControl x:Name="SessionSetupUserControl"
DataContext="{Binding SessionSetupViewModel}" />
</UserControl>
這樣,外部泛型“ UserControl”直接與其自身綁定,並且可以根據您的轉換器可見/隱藏/折疊。
然后將內部用戶控件專門綁定到SessionSetupViewModel的數據上下文
由於您更改了SessionSetupUserControl實例的DataContext,因此其他綁定正嘗試在您分配的DataContext上解析。
這意味着您對Visibility的綁定正在SessionSetupViewModel上查找名為“ Connected”的屬性。
調試時請注意Visual Studio的輸出日志,您肯定會看到綁定錯誤,這幾乎說明了這一點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.