メインビューのグリッドに配置されたビューのプロパティを設定する際に問題があります。具体的には、それを隠すボタンを実装すると同時に、この列の横にある別のビューのColumnSpanをすべての列にまたがるように設定するTreeViewエクスプローラです。私のXAMLは、次のようになります。MVVM別のビューに配置されたビューのプロパティを変更する
<UserControl x:Class="ImageViewer.View.MainView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:ImageViewer.View"
xmlns:model="clr-namespace:ImageViewer.ViewModel"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<UserControl.DataContext>
<model:MainViewModel/>
</UserControl.DataContext>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="50"/>
<RowDefinition Height="10*"/>
<RowDefinition Height="1*"/>
</Grid.RowDefinitions>
<Grid Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="2*"/>
<ColumnDefinition Width="62*"/>
<!--<ColumnDefinition Width="0.1*"/>-->
<ColumnDefinition Width="40*"/>
<ColumnDefinition Width="195*"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<local:FileExplorerView x:Name="fileExplorerView" Grid.Column="0" Grid.ColumnSpan="2" Margin="0,0,0,0.333">
<local:FileExplorerView.Style>
<Style TargetType="{x:Type local:FileExplorerView}">
<Setter Property="Visibility" Value="Visible"/>
<Style.Triggers>
<DataTrigger Binding="{Binding FileExplorerVisibility}" Value="Collapsed">
<Setter Property="Visibility" Value="Collapsed"/>
</DataTrigger>
</Style.Triggers>
</Style>
</local:FileExplorerView.Style>
</local:FileExplorerView>
<local:TiledWindowView Margin="0,0,1,0.333">
<local:TiledWindowView.Style>
<Style TargetType="{x:Type local:TiledWindowView}">
<Setter Property="Grid.ColumnSpan" Value="1"/>
<Setter Property="Grid.Column" Value="2"/>
<Style.Triggers>
<DataTrigger Binding="{Binding FileExplorerVisibility}" Value="Collapsed">
<Setter Property="Grid.ColumnSpan" Value="4"/>
<Setter Property="Grid.Column" Value="0"/>
</DataTrigger>
</Style.Triggers>
</Style>
</local:TiledWindowView.Style>
</local:TiledWindowView>
</Grid>
<local:MainMenuView Grid.Row="0"/>
<local:FooterView Grid.Row="2"/>
</Grid>
MainViewModelで
私はOnPropertyChangeメソッドを呼び出すと、私は単一のTextBlockとの見解を交換すると、それをテストし、私がすることができたので、それが正常に動作することを100%確信しています同じプロパティ - FileExplorerVisibilityに対してDataTriggerを使用してXAMLのプロパティを変更します。 DataTriggersに関するこのフォーラムにはたくさんのエントリーがありましたが、私の問題に答える答えは見つからず、どれも私のために働かないことがわかりました。私は解決策を見つけることに何の問題も一度もなかったが、今度は私の最初の質問を作成するためのアカウントを作成しなければならなかった。 誰にもこのコードの何が悪いと思いますか?あるいは、私が気づいていないもう一つのアプローチがこの状況では良いでしょうか?
MainViewModel
private Visibility fileExplorerVisibility = Visibility.Visible;
public Visibility FileExplorerVisibility {
get => fileExplorerVisibility;
set
{
fileExplorerVisibility = value;
NotifyPropertyChanged();
}
}
public MainViewModel()
{
_aggregator.GetEvent<CollapseEvent>().Subscribe(Collapse);
}
public void Collapse()
{
FileExplorerVisibility = Visibility.Collapsed;
}
FileExplorerViewModel
public RelayCommand CollapseCommand { get; set; }
public FileExplorerViewModel()
{
CollapseCommand = new RelayCommand(CollapseExecute, CollapseCanExecute);
}
private void CollapseExecute(object obj)
{
_aggregator.GetEvent<CollapseEvent>().Publish();
//Task.Run(() => CollapseMethod());
}
private bool CollapseCanExecute(object obj)
{
return true;
}
ユーザは次にCollapseEventが公開されるFileExplorerViewでボタンを押し、MainViewModelはそのイベントをサブスクライブし、特定の方法を実行します。私はこの部分を何度もチェックし、うまく動作します。問題はXAMLのどこかにあると思う。
ビューモデルも表示できますか? –
問題はありません。ViewModelsで質問を更新しました – Thompson95
どうしてうまくいかないのですか?ビジュアルスタジオ出力のバインディングエラー? – Evk