2017-01-28 68 views
0

我有一個情況在這裏。啓用按鈕選中/取消WPF

我有一個的ListView使用複選框。複選框被定義爲數據模板。 我有另一個堆棧面板,它包含一個按鈕。我的要求是,最初在窗口加載時,沒有選中任何複選框,並且應該禁用按鈕。 當用戶點擊任何一個複選框時,應啓用按鈕。 當用戶取消選中所有複選框時,應該禁用按鈕。

我使用MVVM模式與牛framework.With事件的幫助,我就能夠實現這一功能。

但我的問題是,我們能否在xaml本身中處理這種情況。可能使用觸發器或轉換器?

我是新來WPF和有關WPF沒有深刻的認識。任何幫助表示讚賞。

我已經使用觸發器嘗試。但由於複選框在ListView中並且定義爲數據模板,我無法從按鈕樣式訪問複選框的元素名稱。

粗糙大綱如下提前

<ListView x:Name="MylistView" ItemsSource="{Binding Collection}" Height="250" 
       SelectionMode="Single" 
       BorderBrush="Transparent"> 
     <ListView.ItemTemplate> 
      <DataTemplate> 
       <CheckBox x:Name="Checkbox" Content="{Binding Description}" IsChecked="{Binding IsEnable, Mode=TwoWay}" /> 
      </DataTemplate> 
     </ListView.ItemTemplate> 
</ListView> 

<StackPanel Orientation="Horizontal"> 
     <Button x:Name="Save" Content="{l:Language Key=SAVE}" Width="50" Height="25" Margin="10" 
       Command="{Binding Updpate, Source={StaticResource proxy}}"> 
<Button.Style> 
//How do i refer checkbox from this level. I get only "Mylistview" control at this level 
    </Button.Style> 
    </Button> 
</StackPanel> 

感謝

回答

1

你必須申報財產能見度PropertyChanged事件實現爲:

private bool _Visibility; 
public bool Visibility 
{ get 
     { 
     return _Visibility ; 
     } 
    set 
     { 
      _Visibility = value; 
      RaisePropertyChanged("Visibility"); 
     } 
    } 

internal void RaisePropertyChanged(string prop) 
{ 
    if (PropertyChanged != null) 
     { 
     PropertyChanged(this, new PropertyChangedEventArgs(prop)); 
     } 
} 


public event PropertyChangedEventHandler PropertyChanged; 

設計

<Button Name="btnsdf" Width="35" Height="35" Style="{DynamicResource MetroCircleButtonStyle}" ToolTip="Add Denomination" > 
    <Image Width="30" Source="/Images/icons/add.png" Margin="0,1,0,0"></Image> 
    <Button.Resources> 
      <Style TargetType="Button"> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding Visibility,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Value="true"> 
         Setter Property="Visibility" Value="Visible"></Setter> 
        </DataTrigger> 
        <DataTrigger Binding="{Binding Visibility,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Value="false"> 
         <Setter Property="Visibility" Value="Collapsed"></Setter> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </Button.Resources> 
    </Button> 

您需要在複選框勾選和未勾選事件上設置IsEnabled。我希望這會給你一個想法。

+0

謝謝!我可以這樣做,但由於某些實現,IsChecked被綁定到在「Model」中定義的屬性,而不是在ViewModel中定義的屬性。列表視圖的數據源在ViewModel中定義。按鈕IsEnabled綁定在視圖模型中。所以目前我使用事件來從模型到視圖模型進行通信,當複選框選中/取消選中。這是服務於我的目的。但不是事件通知,有什麼辦法可以在xaml和viewmodel中處理?如果「器isChecked」沒有在模型中定義,這個答案是會符合我的要求 –

+0

您可以在模型中實現RaisePropertyMethod也。沒有必要在ViewModel中聲明它。 – kritikaTalwar

+0

如果這有助於你,你可以接受爲答案。 – kritikaTalwar