簡體   English   中英

屬性綁定到子用戶控件

[英]Property binding to a Child UserControl

我有一個直到現在都無法解決的問題:我正在用C#/ WPF開發應用程序,並使用Caliburn.micro作為框架。 我有多個菜單面板(作為用戶控件),我想在整個應用程序中重用(例如,網格的數據過濾菜單)並顯示在<ContentControl /> 根據應用程序的狀態,可以顯示不同的菜單面板。

現在,我可以設法使事件從菜單的View冒泡到父級的ViewModel。 但是我對屬性保持不變:例如,在過濾菜單中,應在立即應用過濾器時輸入文本。 在父級的“視圖”中具有菜單時,這很容易:我只是在屬性的setter方法中進行了過濾。

是否有可能使某種類似於“消息冒泡”(以cm為單位)的“冒泡”(必須為twoWay!)? 還是任何其他(更好的)MVVM兼容方法?

提前致謝!

一月


最小示例:

ParentView.xaml

<UserControl x:Class="App.ParentView">
    <Grid>
        <ContentControl x:Name="Toolbar" />
    </Grid> 
</UserControl>

ParentViewModel.cs

class ParentViewModel : Screen
{
    public ParentViewModel()
    {
        Toolbar = new MenuViewModel();
    }

    private Screen _toolbar;
    public Screen Toolbar
    {
        // get, set ...
    }

    public void LoadDifferentMenu()
    {
        this.Toolbar = new DifferentMenuViewModel();
    }
}

MenuView.xaml

<UserControl x:Class="App.MenuView">
    <Grid>
        <TextBox x:Name="MyText" />
    </Grid>
</UserControl>

MenuViewModel.cs

class MenuViewModel : Screen
{
    public MenuViewModel()
    {   
    }

    private string _myText;
    public string MyText
    {
        // get, set...
    }
}

在caliburn micro中使用Event Aggregator ,以在MVVM中實現發布者和訂閱者模式。

通信基於消息類型,因此可以用於具有適當類型的單向或雙向通信。

請參閱鏈接https://caliburnmicro.com/documentation/event-aggregator了解實現細節。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM