VisibilityタイプのViewModelプロパティをDockPanelのvisibilityプロパティにバインドしようとしています。
更新されたViewModelコード:
public class SelectWaferButtonViewModel : INotifyPropertyChanged
{
private bool isClicked;
public SelectWaferButtonViewModel()
{
isClicked = false;
}
public bool IsControlVisible
{
get
{
return isClicked;
}
set
{
isClicked = value;
OnPropertyChanged("IsControlVisible");
}
}
public event PropertyChangedEventHandler PropertyChanged;
public void OnButtonClick()
{
if (isClicked)
{
IsControlVisible = false;
}
else
{
IsControlVisible = true;
}
}
protected virtual void OnPropertyChanged(string property)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(property));
}
}
}
これが私の更新されたXAMLコードです:
<DockPanel
Name="tvwDockPanel"
Width="200"
Visibility="{Binding IsControlVisible, FallbackValue=Collapsed, Converter={StaticResource BoolToVisConverter}}"
DockPanel.Dock="Left">
<DockPanel
DockPanel.Dock="Top"
Height="22">
</DockPanel>
そして、次の行でコードビハインドにデータコンテキストを設定します。
tvwDockPanel.DataContext = btnSelectWaferViewModel;
ここで、btnSelectWaferViewModelは、この状況のViewModelオブジェクトです。
そして楽しみのために、ここに私のコードがあります:
public partial class WaferTrackerWindow : Window
{
List<ISubscribeEvents> subscriptionList;
SelectWaferButtonViewModel btnSelectWaferViewModel;
public WaferTrackerWindow()
{
InitializeComponent();
this.InstantiateObjects();
this.SubscribeEvents();
this.SetDataContexts();
}
#region Methods
private void SetDataContexts()
{
tvwDockPanel.DataContext = btnSelectWaferViewModel.IsControlVisible;
}
private void SubscribeEvents()
{
foreach (ISubscribeEvents subscriber in subscriptionList)
{
subscriber.SubscribeEvents();
}
}
private void InstantiateObjects()
{
btnSelectWaferViewModel = new SelectWaferButtonViewModel();
subscriptionList = new List<ISubscribeEvents>();
subscriptionList.Add(
new Classes.WaferTrackerWindow.SelectWaferButtonView(btnSelectWafer, btnSelectWaferViewModel));
}
#endregion
}
ボタンbtnSelectWaferをクリックし、tvwDockPanelのvisibilityプロパティを使用して、バインディングを介してVisibleに設定するだけです。次に、btnSelectWaferをもう一度クリックすると、tvwDockPanelの可視性プロパティが再び折りたたみに設定されます。tvwDockPanelの可視性は、折りたたみまたは可視のいずれかになります。
どんな助けでも素晴らしいでしょう、私はこのデータバインディング全体の概念にかなり慣れていません。