簡體   English   中英

WPF Caliburn.Micro 在 ItemTemplate 中綁定 ViewModel 屬性

[英]WPF Caliburn.Micro binding ViewModel property inside ItemTemplate

如何將 TooTip 的 Visibility 綁定到 ViewModel 中的 ToolTipVisibility 屬性? 我有 MenuObject class,

public class MenuObject
{
    public string Name { get; set; }
    public string IconPath { get; set; }
}

MenuObjects 集合,ViewModel 中的 ToolTipVisibility 屬性,

public class MainViewModel : Conductor<object>
{
    private bool _toolTipVisibility;
    private ObservableCollection<MenuObject> _menuItems;
    public bool ToolTipVisibility
    {
        get { return _toolTipVisibility; }
        set
        {
            _toolTipVisibility = value;
            NotifyOfPropertyChange(() => ToolTipVisibility);
        }
    }
    public ObservableCollection<MenuObject> MenuItems
    {
        get { return _menuItems; }
        set
        {
            _menuItems = value;
            NotifyOfPropertyChange(() => MenuItems);
        }
    }
    public MainViewModel()
    {
        ToolTipVisibility = true;
    }
    public void ToggleVisibility()
    {
        ToolTipVisibility = !ToolTipVisibility;
    }
}

和 ListView 與此集合綁定

<ListView  x:Name="MenuItems">
   <ListView.ItemTemplate>
      <DataTemplate>
         <DataTemplate.Resources>
            <BooleanToVisibilityConverter x:Key="b2vc"/>
         </DataTemplate.Resources>
         <StackPanel Orientation="Horizontal">
            <Image Source="{Binding Path=IconPath}" Stretch="None" Margin="12,0,0,0"/>
            <TextBlock Text="{Binding Path=Name}" Margin="25,0,0,0"/>
            <StackPanel.ToolTip>
               <ToolTip Content="{Binding Path=Name}"
                        Visibility="{Binding ..., Converter={StaticResource b2vc}}"/> <!--// How can i do this? //-->
            </StackPanel.ToolTip>
         </StackPanel>
      </DataTemplate>
   </ListView.ItemTemplate>
</ListView>

請幫幫我。 謝謝: :)

更新:我嘗試了很多方法,但仍然無法解決它。 但我發現了一些東西。 如果我把這個

Visibility="{Binding RelativeSource={RelativeSource Mode=FindAncestor,
    AncestorType={x:Type Window}, AncestorLevel=1},
    Path=DataContext.ToolTipVisibility, Converter={StaticResource b2vc}}"    

在標簽StackPanel中,它工作正常。 但是如果我把同樣的東西放在標簽ToolTip中,它就不起作用。 我錯過了什么?

好問題。 通過可見,我將假設您的意思是“鼠標懸停時可見”,因為這就是Visibility對 WPF 中的ToolTip屬性所做的。

我使用了以下視圖 model,與您的非常相似。 為了簡單起見,我省略了除可見性之外的所有其他綁定:

private bool _isToolTipVisible;

// The 'ToolTip.Visibility' will be bound to this property
public bool IsToolTipVisible
{
    get => _isToolTipVisible;
    set
    {
        _isToolTipVisible = value;
        NotifyOfPropertyChange(nameof(IsToolTipVisible));
    }
}

// This is just so that I am able to demonstrate the effect
public void ChangeToolTipVisibility()
{
    IsToolTipVisible = !IsToolTipVisible;
}

對於視圖,我做了很多你已經在做的事情,只是添加了一個綁定到IsToolTipVisible ,以控制工具提示的可見性。 我添加的按鈕,只是為了能夠演示效果(調用方法ChangeToolTipVisibility()

<Window.Resources>
    <BooleanToVisibilityConverter x:Key="b2vc"/>
</Window.Resources>

<Grid Margin="100">
    <StackPanel Orientation="Horizontal">
        <StackPanel.ToolTip>
            <ToolTip Content="Lorem ipsum" Visibility="{Binding IsToolTipVisible, Converter={StaticResource b2vc}}"/>
        </StackPanel.ToolTip>

        <TextBlock Text="Button text" Margin="25,0,0,0"/>                
        <Button x:Name="ChangeToolTipVisibility" Content="Change visiblity" />

    </StackPanel>
</Grid>

這就是它所需要的。 所以你幾乎已經在那里了,假設我正確理解了你的問題:-)

最后,我找到了解決方案。 這是asnwer https://stackoverflow.com/a/26223802/13230344
這是針對我的情況:

 <ToolTip Content="{Binding Path=Name}"
          Visibility="{Binding DataContext.ToolTipVisibility,
          Source={x:Reference MenuItems}, Converter={StaticResource b2vc}}/>

暫無
暫無

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

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