簡體   English   中英

綁定在Mvvm WPF和Controltab中不起作用

[英]Binding not working in Mvvm wpf and controltab

您好, 錯誤是第一次初始化我的標簽綁定工作,但是當我想更改tabHeader的值時,綁定不起作用。

當我選擇一個標簽后,我想顯示該按鈕並隱藏所有未選擇的標簽的按鈕,

Acceuil.xaml

<TabControl TabStripPlacement="Top" ItemsSource="{Binding Tabs, Mode=TwoWay}" x:Name="ParentTab" SelectedItem="{Binding SelectedTab, Mode=TwoWay}">
   <TabControl.ItemTemplate>
      <DataTemplate>
         <StackPanel Width="Auto" Orientation="Horizontal">
            <TextBox Text="{Binding Guid, Mode=TwoWay}" Height="1" Width="1" Visibility="Hidden"></TextBox>
            <Image Source="{Binding HeaderImg,  Mode=TwoWay}" Height="20" Width="20"/>
            <Label Content="{Binding HeaderSrt, Mode=TwoWay}" Height="Auto" Width="Auto"/>
            <Button Visibility="{Binding IsEnable, Mode=TwoWay}" Content="X" Height="Auto" Width="Auto" Command="{Binding DataContext.Cmd_CloseTab,ElementName=ParentTab}"/>
         </StackPanel>
      </DataTemplate>
   </TabControl.ItemTemplate>
   <TabControl.ContentTemplate>
      <DataTemplate>
         <ContentControl Content="{Binding Content}" />
      </DataTemplate>
   </TabControl.ContentTemplate>
</TabControl>

在AccueilViewModel.cs中

public sealed class TabItem{
   public string HeaderImg { get; set; }
   public string HeaderSrt { get; set; }
   public string Guid { get; set; }
   public Visibility IsEnable { get; set; }
   public ViewModelBase Content { get; set; }
}

public class AccueilViewModel : ViewModelBase{
   private TabItem m_SelectedTab;
   private ObservableCollection<TabItem> m_Tabs;
   public ICommand Cmd_CloseTab { get; set; }

   public ObservableCollection<TabItem> Tabs{
      get{ return m_Tabs; }
      set{ m_Tabs = value; RaisePropertyChanged("Tabs"); }
   }

   public TabItem SelectedTab{
      get{ return m_SelectedTab; }
      set{
         m_SelectedTab = value;
         m_SelectedTab.IsEnable = Visibility.Visible;
         ActivateBtnClose();  // The binding don't work
         RaisePropertyChanged("SelectedTab");
         RaisePropertyChanged("Tabs");
         }
      }

   public AccueilViewModel(){
      Cmd_CloseTab = new RelayCommand(() => Execute_Command_CloseTab());
      m_Tabs = new ObservableCollection<TabItem>();
      Tabs.Add(new TabItem {
               Guid = "System",
               HeaderImg = SingletonIcone.Instance.IcoLoupe,
               IsEnable = Visibility.Visible,
               HeaderSrt = "",
               Content = new ContactTabsViewModel() });
      Tabs.Add(new TabItem {
               Guid = "System",
               HeaderImg = SingletonIcone.Instance.IcoConfig,
               IsEnable = Visibility.Visible,
               HeaderSrt = "",
               Content = new ConfigViewModel() });

         ActivateBtnClose(); // Do Work for binding
      }

我想在未選擇選項卡時隱藏按鈕:

          private void ActivateBtnClose() {

             foreach (var item in Tabs){
                item.IsEnable = Visibility.Hidden;
                if (m_SelectedTab != null) { 
                   if ( m_SelectedTab.Guid != "System" && m_SelectedTab.Guid == item.Guid){
                      m_SelectedTab.IsEnable = Visibility.Visible;
                      item.IsEnable = Visibility.Visible;
                   }
                }

             }
          }

          private void Execute_Command_CloseTab(){
             Tabs[0].HeaderSrt = "AZE"; //The binding don't work
             Console.WriteLine("lol");
                //Tabs.Remove(SelectedTab);
             Console.WriteLine("lol");
                RaisePropertyChanged("Tabs");
            }

          private bool IsTabOppen(string sGuid) {
             bool bRet = false;
             foreach (var item in Tabs){
                if (item.Guid == sGuid) {
                   bRet = true;
                   SelectedTab = item;
                }
             }
             return bRet;
          }
   }

謝謝您的幫助

TabItem更改為:

public sealed class TabItem : ViewModelBase
{
    private string _headerImg;
    private string _headerSrt { get; set; }
    private string _guid { get; set; }
    private Visibility _isEnable { get; set; }
    private ViewModelBase _content { get; set; }

    public string HeaderImg
    {
        get { return _headerImg; }
        set
        {
            _headerImg = value;
            RaisePropertyChanged("HeaderImg");
        }
    }

    // Set the properties for the other fields as above
}

你好,謝謝你正在工作

答案是:

public sealed class TabItem: ViewModelBase
{

    public string HeaderImg { get; set; }
    public string HeaderSrt { get; set; }
    public string Guid { get; set; }

    //public bool IsEnable { get; set; }
    public ViewModelBase Content { get; set; }

    private Visibility _MessageVisibilty;
    public Visibility MessageVisibilty
    {
        get { return _MessageVisibilty; }
        set {
            _MessageVisibilty = value;
            RaisePropertyChanged("MessageVisibilty");}
    }
}

暫無
暫無

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

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